2017-05-27 58 views
0

我試圖解析pg_dump文件,以使對象擁有單個文件,使它更容易開發和維護。如何解析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); 

內容我想我想要的是: 以「僅改變表格」開頭 以「;」結尾 包括「CONSTRAINT」,「PRIMARY」 提取「CONSTRAINT」和「PRIMARY」之間的詞作爲文件名。

回答

0

好吧,我多次嘗試找到答案。要解析並獲取「fkey only」單個文件,可以使用'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 //李元文

相關問題