我有一个应用程序读取现有PostgreSQL 9.1数据库的结构,将其与“应该”状态进行比较并相应地更新数据库。这在大多数情况下都可以正常工作。但是,当我读取当前数据库结构时,我有几个实例死锁。负责查询读取现有的外键:为什么这个查询会死锁?
SELECT tc.table_schema, tc.table_name, tc.constraint_name, kcu.column_name,
ccu.table_schema, ccu.table_name, ccu.column_name
FROM information_schema.table_constraints AS tc
JOIN information_schema.key_column_usage AS kcu
ON tc.constraint_name = kcu.constraint_name
JOIN information_schema.constraint_column_usage AS ccu
ON ccu.constraint_name = tc.constraint_name
WHERE constraint_type = 'FOREIGN KEY'
查看服务器状态在pgAdmin的显示这是已在服务器上运行的唯一活动查询/交易。尽管如此,查询不会返回。
该错误以一种方式重现:当我找到一个产生错误的数据库时,每次都会产生错误。但并非所有数据库都会产生错误。这是一个神秘的错误,我还没有办法尝试或尝试解决这个问题。所以任何输入或想法都非常感谢! PS:我的一个同事刚刚报告他使用PostgreSQL 8.4产生了同样的错误。
我的机器上的测试数据库需要约8秒的时间,大约有700个表。尝试使用EXPLAIN来查看查询是如何执行的并查看所有成本。 –
@Frank,谢谢!没有想到EXPLAIN,并会在下次出现错误时尝试。但目前,这不是关于运行时间,而是显然是一个僵局。查询需要1.5secs在我的数据库...如果它返回。 – Robin