2014-04-01 17 views
0

我在Postgres BOOK數據庫MSPRESS和ORELLY中有兩個模式。 我想在兩個模式創建相同的表:使用單個命令在許多Postgres模式中創建TABLE

CREATE TABLE MSPRRESS.BOOK(title TEXT, author TEXT); 
CREATE TABLE ORELLY.BOOK(title TEXT, author TEXT); 

現在,我想在我的所有模式用一個命令來創建相同的表。

爲了做到這一點,我想到了Postgres 9.3中可用的事件觸發器(http://www.postgresql.org/docs/9.3/static/event-triggers.html)。通過我的事件觸發器攔截CREATE TABLE命令,我想確定創建它的表和模式的名稱,並對所有可用的模式重複相同的命令。可悲的是,事件觸發器過程不會獲取正在創建的表的名稱。

有沒有辦法'實時'同步Postgres架構?

+0

你是否考慮過plgpsql中的'DO'塊,對模式進行迭代?這是一個SQL客戶端的單一命令。 –

回答

1

當前only TG_EVENT and TG_TAG可從事件觸發器獲得,但此功能可能會擴展。與此同時,您可以查詢information_schema的差異,並嘗試添加每個表,其中缺少;但不要忘記,這個同步也會觸發幾個事件觸發器,所以你應該仔細做。

但如果你只是想建立具有相同結構的多個方案(沒有進一步的同步),你可以只寫無模式的查詢,以便他們&來看,它在每一個模式一個接一個,不斷變化的search pathSET search_path/SET SCHEMA

+0

檢查information_schema可能是CREATE TABLE的解決方案,但對於ALTER TABLE而言,它是不明確的。我想在一個方案中的所有DDL命令(CREATE,ALTER,DROP)都反映在所有模式中。 – rlib

+0

但仍然沒有其他辦法可以做到這一點。 'information_schema'是你的最佳選擇,直到事件觸發器被擴展。除非你可以用'C'中的'parsetree'來做令人討厭的事情嗎?http://www.postgresql.org/docs/9.3/static/event-trigger-interface.html – pozs

+0

做壞事的例子? – rlib

相關問題