【问题标题】:Is there a way to show everything that was changed in a PostgreSQL database during a transaction?有没有办法显示事务期间在 PostgreSQL 数据库中更改的所有内容?
【发布时间】:2020-08-12 10:12:23
【问题描述】:

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

“手动”验证每个表上的每个条目需要很长时间。

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

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

【问题讨论】:

标签: postgresql transactions diff


【解决方案1】:

伙计,在捕获数据库更改时,您要寻找的是互联网上最容易搜索的内容。可以说是一种版本控制。

但据我所知,遗憾的是 PostgreSQLMySql 中没有内置 方法可用。但是您可以通过为最有用的操作设置/添加一些触发器来克服它。

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

通过这种方式,您可以实现您想要的。我知道这个过程是完全手动的,但非常有效。

【讨论】:

  • 我希望不必添加新表和触发器,因为我有很多表,但似乎没有办法解决。
【解决方案2】:

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

【讨论】:

  • 您无需重新启动 Postgres 即可更改该设置。一个简单的select pg_reload_conf(); 就足够了。
  • 我的错!出于某种原因,我认为该参数不是动态的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 1970-01-01
  • 2019-08-16
  • 1970-01-01
  • 2019-01-28
  • 2019-10-15
  • 2010-12-30
相关资源
最近更新 更多