Postgres 生成列:陷阱和最佳实践
当在被复制的表中使用 PostgreSQL 的生成列时,有一些重要的注意事项需要牢记。这些陷阱可能会影响目标系统中的复制过程和数据一致性。
生成列的问题
-
未通过
pgoutput
发布: 生成列不会通过pgoutput
逻辑复制插件发布。这意味着当您从 PostgreSQL 复制数据到另一个系统时,生成列的值不会包含在复制流中。 -
主键问题: 如果生成列是主键的一部分,则可能会在目标端引起重复数据删除问题。由于生成列值未被复制,目标系统将没有必要的信息来正确识别和删除重复行。
最佳实践
为了解决这些限制,请考虑以下最佳实践
-
在目标端重新创建生成列: 建议在目标端使用诸如 dbt(数据构建工具)或其他数据转换机制重新创建这些列,而不是依赖复制过程来处理生成列。
-
避免在主键中使用生成列: 在设计将被复制的表时,最好避免将生成列作为主键的一部分包含在内。
即将到来的 UI 改进
在即将到来的版本中,我们计划添加一个 UI 来帮助用户进行以下操作
-
识别包含生成列的表: UI 将具有识别包含生成列的表的功能。这将帮助用户了解哪些表受到此问题的影响。
-
文档和最佳实践: UI 将包含在复制表中使用生成列的最佳实践,包括关于如何避免常见陷阱的指导。