【问题标题】:Is it possible enter a running transaction using psql (the cli tool)?是否可以使用 psql(cli 工具)输入正在运行的事务?
【发布时间】:2021-11-24 14:02:03
【问题描述】:

我使用调试器对使用事务的数据库运行测试。 有时,当我遇到断点时,我想使用我的测试当前正在使用的相同事务在数据库中四处查看,看看它的代码看到了什么。 我知道,我可以通过调试器访问数据库,但一些简单的 SQL 有时会不那么复杂。

这可能吗?

【问题讨论】:

标签: postgresql testing transactions


【解决方案1】:

这是一个合理的愿望,它可能很方便,但在 PostgreSQL 中没有办法做到这一点。

【讨论】:

  • 这就是我所担心的......
【解决方案2】:

您可以检查pg_stat_activity 表以查看当前正在处理的所有查询。使用正确的权限,您还可以列出pg_temp 模式的内容,并查看创建了哪些临时对象以及它们的一些元数据。您可以让您的代码在查询中将标签和其他信息注入到 cmets 中,这样您就可以将在 pg_stat_activity 中看到的查询链接到特定的工作进程。

但是您不能劫持会话或检查属于其他会话的 pg_temp 模式中的表的内容,即使具有提升的特权 - 我认为这是有目的维护的技术限制。

如果您使用 PL/pgSQL,您可以修改函数以将调试信息保存在某处。 对于测试运行,您还可以从temp 表切换到unlogged 表,这将为您提供几乎相同的性能,但在会话结束后不会被删除。请记住,这可能会导致冲突:如果两个或多个会话用于操作各自的 temp 表,则在切换到 unlogged 后,它们将不得不使用不同的名称或架构。

【讨论】:

  • 都是真的,还有共享锁表pg_locks和其他东西,但所有这些都不允许您检查该事务所看到的数据库状态...跨度>
  • @LaurenzAlbe 我同意,这就是为什么我赞成你的回答。我将此作为评论开始,但由于它不符合字符数限制,我想我会将它作为任何寻找此问题的人的备用答案,同时考虑任何可用于在运行时检查查询的方法,在 db 上。
猜你喜欢
  • 2023-01-12
  • 1970-01-01
  • 2018-09-28
  • 2017-04-05
  • 2018-06-28
  • 1970-01-01
  • 2020-10-14
  • 1970-01-01
  • 2021-10-31
相关资源
最近更新 更多