既存の 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 でサーバーのステータスを表示すると、これがサーバー上で実行されている唯一のアクティブなクエリ/トランザクションであることがわかります。それでも、クエリは返されません。
エラーはある意味で再現可能です。エラーを生成するデータベースを見つけると、毎回エラーが生成されます。ただし、すべてのデータベースでエラーが発生するわけではありません。これは不可解なバグの 1 つであり、他に何を試すか、またはこれを回避する方法についてのオプションとアイデアが不足しています。そのため、ご意見やアイデアは大歓迎です。
PS: 私の同僚が、PostgreSQL 8.4 を使用して同じエラーが発生したと報告しました。