2

シナリオ:

DELETE FROM table_x WHERE id not in (1,2,3,4)

応答:

テーブル "table_x" の更新または削除は、テーブル "table_y" の外部キー制約 "fk1" に違反しています 詳細: キー (table_x_id)=(7) はテーブル "table_y" から参照されています。

  • すべてのレコードの「table_y」を空にしました
  • 「table_y」の FK リストに FK が表示されませんでした
  • テーブル「table_y」を完全に削除しました

このメッセージは引き続き表示されるため、pg_constraintsテーブルのどこかにルージュ レコードがあると想定されます。制約「fk1」を探して、2 つのレコードを見つけて削除します。

クエリ:

delete from pg_constraint where conname = 'fk1'

これで、次のエラーが発生します。

[Err] エラー: 制約 868152 のキャッシュ ルックアップに失敗しました

この時点で、いくつかのレコードをクリーンアップする必要があることはかなり確信していますが、どのようにすればよいかわかりません - 誰かが私を正しい方向に向けることができる経験を持っていますか?

4

1 に答える 1

0

これは悪いインデックスのように聞こえます。ここでの解決策は部分的なものであることに注意してください。根本的な原因は何かを突き止める必要があります。過去に見た原因には、ハード ドライブと RAM の故障、CPU の過熱または故障が含まれます。

外部キー制約は一意のインデックスにヒットします。ここで奇妙な動作が見られる場合、問題は不適切なインデックスである可能性があります。問題を取り除くために、テーブルまたは関連するデータベース全体の再インデックスを試みてください。

これは、掃除機をかけなかったことが原因ではないと思います。xid のラップアラウンドは発生すると厄介ですが、最近のバージョンではそれが起こらないようにするために多大な努力を払っています。これはせいぜいインデックスの破損である可能性があります。そうでない場合は、データの破損です (インデックスの破損は IME よりもはるかに頻繁に発生しますが、データの破損はすべて同じ原因で発生するため、問題の原因を突き止めてください)。

于 2013-04-05T05:39:41.843 に答える