检测PG数据库模式(数据字典)是否已更改

时间:2017-04-13 19:18:36

标签: postgresql

有没有快速检测PostgreSQL数据库架构是否发生变化的方法? (当ALTER TABLE之类的PG模式运行时,是否存在内部序列或sth会增加?我想根据架构查询缓存数据,并需要一个失效标记。

一种方法是运行模式反射查询(针对pg_class,pg_attribute和所有其他查询)并对它们产生哈希,但我想知道是否有更简单的方法来实现相同的目标。它不需要精确,只是表示是时候刷新缓存并在应用程序层重新加载模式。

澄清:这不是关于模式迁移或获取模式差异。它只是一个缓存失效标记。这是一个简单的标志:“自标记X起,模式完全改变了”。 (另外我不是在讨论模式命名空间,而是关于数据字典,也就是模式(database schema)。也就是说,更改了数据库的结构。)

或者换言之:是否存在SQLite3 PRAGMA schema_version的PG版本。

2 个答案:

答案 0 :(得分:3)

使用EVENT TRIGGER

获得schema

行的EVENT TRIGGER on ddl_command_end can be created
  

架构对象所属架构的名称(如果有);否则为NULL。没有引用。

这是list of everything ddl_command_end currently fires on

有关详细信息,请参阅文档中的Chapter on Event Triggers

答案 1 :(得分:-1)

使用pg_dump

我认为执行此操作的简单(可能是唯一)方法是使用pg_dump

缓存架构差异
pg_dump --schema-only --schema myschema

然后检测模式是否随转储一起发生了变化。您可能想要过滤掉序列。没有用于逻辑复制的PostgreSQL解决方案适用于DDL。