私は、既存のPostgreSQL 9.1データベースの構造を読み、それを "should be"状態と比較してそれに応じてデータベースを更新するアプリケーションを持っています。それはほとんどの場合、大丈夫です。しかし、現在デッドロックされている現在のデータベース構造を読むときに、私はいくつかのインスタンスを持っていました。責任のクエリは、既存の外部キーを読み取りますpgAdminで、サーバのステータスを表示なぜこのクエリはデッドロックですか?
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'
が、これは、サーバー上で実行している唯一のアクティブクエリ/トランザクションであることを示しています。それでも、クエリは返されません。
エラーは再現性があります。エラーを生成するデータベースを見つけると、毎回エラーが発生します。しかし、すべてのデータベースでエラーが発生するわけではありません。これは不思議なバグの1つで、これ以外に何を試していくのか、これを回避する方法については、オプションやアイデアが不足しています。だから、どんな入力やアイデアも高く評価されています!
PS:私の同僚は、PostgreSQL 8.4を使用して同じエラーが発生したとちょうど報告しました。
私のマシン上のテストデータベースでは約7秒、約8秒かかります。 EXPLAINを実行してクエリの実行方法を確認し、すべてのコストがどこにあるかを確認してください。 –
@フランク、ありがとう! EXPLAINを考えていなかったので、次回エラーが表示されるように試みます。しかし、現時点では、これはランタイムではなく、明らかにデッドロックです。クエリは私のDBで1.5秒かかる...それが返された場合。 – Robin