我的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架构的“实时”同步?
答案 0 :(得分:1)
当前only TG_EVENT
and TG_TAG
可从事件触发器获得,但此功能可能会扩展。在此期间,您可以查询information_schema的差异,并尝试添加缺少的每个表;但是不要忘记这个同步也会触发几个事件触发器,所以你应该小心。
但是如果你只想构建具有相同结构的几个模式(没有进一步的同步),你可以编写无模式的查询来构建它们。在使用search path更改SET search_path
/ SET SCHEMA
之后,逐个在每个架构上运行它。