実行時:
TRUNCATE TABLE YYYYY RESTART IDENTITY
次のエラーメッセージが表示されます。
ERROR: cannot truncate a table referenced in a foreign key constraint
DETAIL: Table "XXXXX" references "YYYYY".
HINT: Truncate table "XXXXX" at the same time, or use TRUNCATE ... CASCADE.
HINT
の2つの提案のうち:
TRUNCATE ... CASCADE
の使用は意味があり、機能しますが、カスケードがどこに行くのかを確認するためにYYYYY
を検査する必要があるため、あまり明確ではありません。そのため、他のオプションを試してみたいと思います。
Truncate table "XXXXX" at the same time
、でも私の質問:
テーブルat the same time
を切り捨てるとはどういう意味ですか?
TRUNCATE XXXXX...
を追加してみました(そして、両方をBEGIN
/COMMIT
でラップしました)が、同じエラーが発生します。
- 同時にテーブルを切り捨てるとはどういう意味ですか?
同じことを意味します。複数のテーブルを切り捨てることができます。
TRUNCATE xxxxx, yyyyy RESTART IDENTITY ;
Postgresドキュメントの詳細: TRUNCATE
。
1)カスケードされたトランケートは危険な場合があります。ルックアップテーブルがある場合(この場合、私はXXXXを信じています)は、それが切り捨てられてすべてのデータが失われるので、さようならにキスしてください。
たとえば、注文(XXXX)へのFKを持つ顧客(YYYY)のテーブルがあるとします。カスケードされた切り捨てを使用してYYYYを切り捨てると、YYYYが切り捨てられます。そうでない場合は、表示されている切り捨てエラーが表示されます。
2)同時にテーブル「XXXX」を切り捨てることは、ルックアップ/参照テーブルも切り捨てることを示唆していることを意味します。