zam*_*6ak 5 postgresql backup restore postgresql-9.6 regclass
我有一个大表(审计),其中存储架构和表的关系 ID。这可以通过触发器使用 TG_RELID 方便地填充。它也很方便,因为我可以对它建立索引,并且索引会比我单独存储“模式”(文本)和“表”(文本)列并对它们建立索引要小。另外,我可以使用它进行查询WHERE relation_id = 'myschema:mytable'::regclass,它就可以工作。
我的问题是,这在备份/恢复方面是否“安全”(schema.table 在目标服务器中是否具有与源服务器中相同的 regclass/oid ?
我还应该注意其他问题吗?
我根本不会依赖 OID 的特定值来实现可移植。即使您尝试并发现它可以与当前版本的 PostgreSQL 配合使用,但在较新的版本中可能无法正常工作。
如果您在源计算机上备份数据库并尝试在另一台计算机(或者通常是另一个PostgreSQL 数据库集群)上恢复它,而该计算机已经具有其他数据库、模式等,则很可能您的源计算机上的不同 OID正在使用的数据库已用于表示目标数据库中的其他不同事物。
schema_name.table_name与 OID 的对应关系由 PostgreSQL 在其系统表中处理。如果您需要同等的功能,并保证它的行为符合您需要的方式,而不是PostgreSQL 使用其内部 OID 的方式,我建议您实际上使用表复制此行为your_tables,在表中存储任意id(序列)和schema_name, table_name. 这样,您的数据库就可以安全地备份和恢复,并且您可能会避免对任何较新的 postgreSQL 版本进行修改。
您可能需要在触发器中进行额外的查找,但这可能会在将来为您省去很多麻烦。
| 归档时间: |
|
| 查看次数: |
750 次 |
| 最近记录: |