跳到主要内容
跳到主要内容

Postgres 生成列:注意事项和最佳实践

在使用 PostgreSQL 的生成列的表进行复制时,有一些重要的考虑事项。这些问题可能会影响复制过程和目标系统中的数据一致性。

生成列的问题

  1. 未通过 pgoutput 发布: 生成列不会通过 pgoutput 逻辑复制插件发布。这意味着在将数据从 PostgreSQL 复制到另一个系统时,生成列的值不会包含在复制流中。

  2. 主键问题: 如果生成列是主键的一部分,这可能会在目标上导致去重问题。由于生成列的值没有被复制,目标系统将没有必要的信息来正确识别和去重行。

  3. 架构更改问题: 如果您向一个已经被复制的表添加生成列,新列在目标中将不会被填充 - 因为 Postgres 不会提供新列的 RelationMessage。如果您随后向同一表添加新的非生成列,则 ClickPipe 在尝试协调架构时,将无法在目标中找到生成列,导致复制过程失败。

最佳实践

为了绕过这些限制,可以考虑以下最佳实践:

  1. 在目标上重新创建生成列: 不要依靠复制过程来处理生成列,建议使用 dbt(数据生成工具)或其他数据转换机制在目标上重新创建这些列。

  2. 避免在主键中使用生成列: 在设计将被复制的表时,最好避免将生成列纳入主键的一部分。

即将推出的 UI 改进

在即将发布的版本中,我们计划添加一个 UI,帮助用户处理以下事项:

  1. 识别具有生成列的表: UI 将具有识别包含生成列的表的功能。这将帮助用户理解哪些表受到此问题的影响。

  2. 文档和最佳实践: UI 将包括在复制表中使用生成列的最佳实践,提供如何避免常见陷阱的指导。