web-dev-qa-db-ja.com

Postgresは「テーブルを同時に切り捨てる...」を提案しています

実行時:

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つの提案のうち:

  1. TRUNCATE ... CASCADEの使用は意味があり、機能しますが、カスケードがどこに行くのかを確認するためにYYYYYを検査する必要があるため、あまり明確ではありません。そのため、他のオプションを試してみたいと思います。

  2. Truncate table "XXXXX" at the same time、でも私の質問:

    テーブルat the same timeを切り捨てるとはどういう意味ですか?


TRUNCATE XXXXX...を追加してみました(そして、両方をBEGIN/COMMITでラップしました)が、同じエラーが発生します。

4
davetapley
  1. 同時にテーブルを切り捨てるとはどういう意味ですか?

同じことを意味します。複数のテーブルを切り捨てることができます。

TRUNCATE xxxxx, yyyyy RESTART IDENTITY ;

Postgresドキュメントの詳細: TRUNCATE

5
ypercubeᵀᴹ

1)カスケードされたトランケートは危険な場合があります。ルックアップテーブルがある場合(この場合、私はXXXXを信じています)は、それが切り捨てられてすべてのデータが失われるので、さようならにキスしてください。

たとえば、注文(XXXX)へのFKを持つ顧客(YYYY)のテーブルがあるとします。カスケードされた切り捨てを使用してYYYYを切り捨てると、YYYYが切り捨てられます。そうでない場合は、表示されている切り捨てエラーが表示されます。

2)同時にテーブル「XXXX」を切り捨てることは、ルックアップ/参照テーブルも切り捨てることを示唆していることを意味します。

1
codedawg82