他のデータによって参照されるデータを更新しようとしています。ms_automobileテーブルを切り捨ててリロードしますが、rm_automobileテーブルには外部キーがあります。テーブル上のトリガーを無効にした後に外部キーがアクティブになるのはなぜですか?
'DISABLE TRIGGER' 文は(postgresの、スーパーユーザーとして実行する)作業しているように見えます:
mobilesurvey=# ALTER TABLE ms_automobile DISABLE TRIGGER ALL;
ALTER TABLE
mobilesurvey=# ALTER TABLE rm_automobile DISABLE TRIGGER ALL;
ALTER TABLE
しかし、私は、その後ms_automobileテーブルを切り捨てることはできません。
mobilesurvey=# TRUNCATE TABLE ms_automobile;
ERROR: cannot truncate a table referenced in a foreign key constraint
DETAIL: Table "rm_automobile" references "ms_automobile".
HINT: Truncate table "rm_automobile" at the same time, or use TRUNCATE ... CASCADE.
アゲイン、私はrm_automobileデータを失いたくはありません。 TRUNCATEの後に、欠落しているms_automobileデータを含むpg_restoreを実行する予定です。
可能であれば、私は制約を破棄するのではなく、無効にしたいと思っています。もっと多くのものがあり、disable/enableを維持することはdrop/addを維持するよりも誤りが起こりにくいようです。
ここで、実際に外部キーを無効にするにはどうすればよいですか。