有没有办法显示事务期间 PostgreSQL 数据库中更改的所有内容?

Is there a way to show everything that was changed in a PostgreSQL database during a transaction?

我经常需要在大型 PostgreSQL 数据库的单个事务中执行复杂的 sql 脚本,我想验证事务期间更改的所有内容。

Verifying each single entry on each table "by hand" would take ages.

在脚本之前和之后将数据库转储为纯 sql 并在转储上使用 diff 并不是一个真正的选择,因为每个转储大约有 50G 数据。

有没有办法显示在单个事务中添加、删除或修改的所有数据?

如果您只是偶尔需要分析脚本的行为,那么最简单的方法是将服务器配置参数 log_min_duration_statement 更改为 0,然后恢复为分析前的任何值。然后所有脚本 activity 将被写入实例日志。 如果您的存储未准备好容纳此数量的数据,或者您不希望将敏感客户端数据写入 plain-text 日志文件的系统,则此方法不适用。

伙计,在捕获数据库更改方面,您正在寻找的是 Internet 上最容易搜索的内容。可以说是一种版本控制。

但据我所知,可悲的是 in-built 方法在 PostgreSQLMySql。但是您可以通过 setting/adding 最常用操作的一些触发器来克服它。

您可以创建一些备份 schemastables 来捕获更改(更新)、创建或删除的更改。

这样你就可以达到你想要的效果。我知道这个过程是完全手动的,但确实有效。