開発とメンテナンスをより簡単にするために、pg_dump ファイルをオブジェクト固有の単一ファイルに解析しようとしています。
以下に例を示します。
--
-- Name: u_id; Type: DEFAULT; Schema: sc_udccockpit; Owner: udccockpit
--
ALTER TABLE ONLY alarmentity
ADD CONSTRAINT alarmentity_pkey PRIMARY KEY (u_id);
--
-- Name: alarmstring_pkey; Type: CONSTRAINT; Schema: sc_udccockpit; Owner: udccockpit; Tablespace:
--
ALTER TABLE ONLY alarmentity
ADD CONSTRAINT alarmentity_f_active_description_id_fkey FOREIGN KEY (f_active_description_id) REFERENCES alarmstring(u_id);
--
-- Name: alarmentity_f_model_description_id_fkey; Type: FK CONSTRAINT; Schema: sc_udccockpit; Owner: udccockpit
--
ALTER TABLE ONLY alarmentity
ADD CONSTRAINT alarmentity_f_model_description_id_fkey FOREIGN KEY (f_model_description_id) REFERENCES alarmstring(u_id);
--
-- Name: alarmentity_f_module_id_fkey; Type: FK CONSTRAINT; Schema: sc_udccockpit; Owner: udccockpit
--
ALTER TABLE ONLY alarmentity
ADD CONSTRAINT alarmentity_f_module_id_fkey FOREIGN KEY (f_module_id) REFERENCES alarmstring(u_id);
--
-- Name: alarmentity_f_node_name_id_fkey; Type: FK CONSTRAINT; Schema: sc_udccockpit; Owner: udccockpit
--
ALTER TABLE ONLY alarmentity
ADD CONSTRAINT alarmentity_f_node_name_id_fkey FOREIGN KEY (f_node_name_id) REFERENCES alarmstring(u_id);
--
-- Name: alarmentity_f_resource_id_id_fkey; Type: FK CONSTRAINT; Schema: sc_udccockpit; Owner: udccockpit
--
ALTER TABLE ONLY alarmentity
ADD CONSTRAINT alarmentity_f_resource_id_id_fkey FOREIGN KEY (f_resource_id_id) REFERENCES alarmstring(u_id);
たとえば、ファイル: alarmentity_pkey.sql に変更したいのですが、その中には次のようなコンテンツしかありません。
--
-- Name: u_id; Type: DEFAULT; Schema: sc_udccockpit; Owner: udccockpit
--
ALTER TABLE ONLY alarmentity
ADD CONSTRAINT alarmentity_pkey PRIMARY KEY (u_id);
私が欲しいのは、「ALTER TABLE ONLY」で開始する「;」で終了することだと思います。"CONSTRAINT", "PRIMARY" を含む "CONSTRAINT" と "PRIMARY" の間の単語をファイル名として抽出します。
はい、何度も試した結果、答えが見つかりました。「fkey のみ」の単一ファイルを解析して取得するには、「awk」コマンドを使用できます。
function extract_constraint_fkey(){
awk ' /--/,/\;$/ { str = str ? str "\n" $0 : $0 } /\;$/ { if( str ~ /FOREIGN KEY/ ) { print str > "database\/constraint\/fkey\/"substr($3,1)".sql" };str = "" };' $1
}
これに従って、テーブルへの制約を作成することに関連する主キー、インデックス、変更シーケンスなどの解析を続けることができます。
BR // 元文李
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加