Postgresql -无法看到阻止我的实际交易的确切查询或交易

xoefb8l8  于 2024-01-07  发布在  PostgreSQL
关注(0)|答案(2)|浏览(141)

注意:我使用DBeaver 21.1.3作为PostgreSQL开发工具。
为了测试,我创建了一个表:

CREATE TABLE test_sk1(n numeric(2));

字符串
然后我在DBEaver上禁用了Auto-Commit,以验证是否可以看到其他事务的阻塞查询。
x1c 0d1x的数据
然后我在我的表上执行了一个插入:

INSERT INTO test_sk1(n) values(10);


现在这个插入事务是未提交的,这将阻塞表。
然后我又打开了另一个新的SQL窗口,并在表上尝试alter命令。

ALTER TABLE test_sk1 ADD COLUMN v VARCHAR(2);


现在我看到alter transaction被阻塞了。但是当我在锁中验证时,我看到这个Alter transaction被“Show search_path;”transaction阻塞了,在那里我期待“搜索.”transaction作为阻塞查询。



我使用下面的查询来获取锁:

SELECT p1.pid,
       p1.query as blocked_query,
       p2.pid as blocked_by_pid,
       p2.query AS blocking_query
  FROM pg_stat_activity p1, pg_stat_activity p2
 WHERE p2.pid IN (SELECT UNNEST(pg_blocking_pids(p1.pid)))
   AND cardinality(pg_blocking_pids(p1.pid)) > 0;


为什么我们的数据库会出现这种情况?

holgip5t

holgip5t1#

尝试使用psql进行这样的实验。DBeaver和许多其他工具将执行许多您不打算运行的SQL语句。
您在pg_stat_activity中看到的查询只是该进程完成的最新查询,不一定是锁定任何资源的查询。

mm5n2pyu

mm5n2pyu2#

默认情况下,DBeaver的SQL编辑器会在执行每个查询后尝试更新有关当前目录/模式的信息。您可以通过取消选中Window -> Preferences -> Editors -> SQL Editor-> SQL Processing -> Refresh active schema after SQL execution来关闭此功能,并查看它是否会更改您在会话浏览器中看到的内容。

相关问题