【发布时间】:2021-11-24 14:02:03
【问题描述】:
我使用调试器对使用事务的数据库运行测试。 有时,当我遇到断点时,我想使用我的测试当前正在使用的相同事务在数据库中四处查看,看看它的代码看到了什么。 我知道,我可以通过调试器访问数据库,但一些简单的 SQL 有时会不那么复杂。
这可能吗?
【问题讨论】:
-
你可以试试pg_dirtyread
标签: postgresql testing transactions
我使用调试器对使用事务的数据库运行测试。 有时,当我遇到断点时,我想使用我的测试当前正在使用的相同事务在数据库中四处查看,看看它的代码看到了什么。 我知道,我可以通过调试器访问数据库,但一些简单的 SQL 有时会不那么复杂。
这可能吗?
【问题讨论】:
标签: postgresql testing transactions
这是一个合理的愿望,它可能很方便,但在 PostgreSQL 中没有办法做到这一点。
【讨论】:
您可以检查pg_stat_activity 表以查看当前正在处理的所有查询。使用正确的权限,您还可以列出pg_temp 模式的内容,并查看创建了哪些临时对象以及它们的一些元数据。您可以让您的代码在查询中将标签和其他信息注入到 cmets 中,这样您就可以将在 pg_stat_activity 中看到的查询链接到特定的工作进程。
但是您不能劫持会话或检查属于其他会话的 pg_temp 模式中的表的内容,即使具有提升的特权 - 我认为这是有目的维护的技术限制。
如果您使用 PL/pgSQL,您可以修改函数以将调试信息保存在某处。
对于测试运行,您还可以从temp 表切换到unlogged 表,这将为您提供几乎相同的性能,但在会话结束后不会被删除。请记住,这可能会导致冲突:如果两个或多个会话用于操作各自的 temp 表,则在切换到 unlogged 后,它们将不得不使用不同的名称或架构。
【讨论】:
pg_locks和其他东西,但所有这些都不允许您检查该事务所看到的数据库状态...跨度>