如何识别Greenplum中的表是不是已更改?

Posted

技术标签:

【中文标题】如何识别Greenplum中的表是不是已更改?【英文标题】:How to identify if a table has been changed in Greenplum?如何识别Greenplum中的表是否已更改? 【发布时间】:2016-12-01 21:54:24 【问题描述】:

我们有一个将两个表作为输入的过程。这是我的场景.. 运行流程时,我需要知道两个输入表中的数据是否已从先前执行期间的内容更改(插入或更新或截断或删除),以确定在过程。基本上,这是我确定运行是重新运行还是流程失败后运行的标准之一。

我可以想到的一种方法是在进程运行时备份输入表,并在下次运行时使用 EXCEPT 语句将其与输入进行比较,并在进程成功完成时删除备份的表。但我正在寻找更优雅的东西。

我认为的另一种方法是通过使用触发器捕获时间戳来做一些基于它的事情。但不幸的是,在 Greenplum 中使用触发器执行查询似乎是不可能的。我将不得不在添加触发器的同一张表上添加时间戳列。我不热衷于这样做,因为输入表是由流程的用户而不是开发人员控制的。如果由于某种原因在添加新的时间戳列后流程失败,它可能会让用户(来自业务)感到惊讶。

关于在 Greenplum 中捕获此表更改信息的有效方法有什么建议吗?我正在使用 PostgrSQL。

谢谢。

【问题讨论】:

【参考方案1】:

Greenplum 不支持触​​发器,因此建议的解决方案不起作用。

您如何将您的活动记录到每个流程执行的表或文件中?

【讨论】:

以上是关于如何识别Greenplum中的表是不是已更改?的主要内容,如果未能解决你的问题,请参考以下文章

Greenplum数据库中的索引和集群

Greenplum:有没有办法定义一个数据将只存储在 master 中的表

Greenplum中删除的表的回滚数据

Greenplum,是不是可以将 CSV 导出到远程服务器?

如何识别哪一列已更改[重复]

如何使用 Zend Guard 加载器识别 PHP 文件是不是已编码