使用单个命令在许多Postgres模式中创建TABLE

时间:2014-04-01 08:36:07

标签: postgresql events triggers synchronization schema

我的Postgres BOOK数据库中有两个模式,MSPRESS和ORELLY。 我想在两个模式中创建相同的表:

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架构的“实时”同步?

1 个答案:

答案 0 :(得分:1)

当前only TG_EVENT and TG_TAG可从事件触发器获得,但此功能可能会扩展。在此期间,您可以查询information_schema的差异,并尝试添加缺少的每个表;但是不要忘记这个同步也会触发几个事件触发器,所以你应该小心。

但是如果你只想构建具有相同结构的几个模式(没有进一步的同步),你可以编写无模式的查询来构建它们。在使用search path更改SET search_path / SET SCHEMA之后,逐个在每个架构上运行它。