SQL スクリプトを使用して DB を復元しようとしていますが、外部キー制約が邪魔になります
MySQL DB を PostgreSQL に移行します。MySQL の create table 構文がかなり異なってしまったので、スキーマは同じだがデータが異なる別の PostgreSQL DB を取得し、そこからスキーマのみを復元しました。言い換えれば、テーブル、制約、シーケンス、およびそのすべてを含むデータベースがありますが、内部にはデータがありません。
それで、データを復元する時が来ました。SQL スクリプトとして phpMyAdmin (データのみ) を使用して MySQL DB のバックアップを取り (pgAdmin は何らかの理由で zip または gzip ファイルを受け入れないようです)、SQL スクリプトを実行します。さて、ここで問題が発生し始めます。これは当然のことです。MySQL から PostgreSQL に移行するので、構文エラーは必ず発生します。
ただし、次のような、構文に関連しない他の問題があります。
ERROR: insert or update on table "_account" violates foreign key constraint "fk_1_account"
DETAIL: Key (accountid)=(2) is not present in table "_entity".
つまり、基本的に外部制約が存在し、クエリはデータを_account
テーブルに挿入しようとしていますが、対応するデータはまだテーブルに挿入されて_entity
いません。どうすればそれを回避できますか?pgAdmin3/PostgreSQL ですべての制約を無効にし、データを挿入してから、制約を再度有効にする方法はありますか?
私が遭遇した構文関連のエラーは、これでした:
INSERT INTO _accounttype_seq (id) VALUES (11);
そのステートメントに相当するPostgreSQL(私が正しければ)は
ALTER SEQUENCE _accounttype_seq INCREMENT BY 11;
ただし、スクリプト全体を実行して、200 以上の Sequence 挿入ステートメントをすべて変更するのは少し面倒です。ここでは怠惰ですが、シーケンスを処理する簡単な方法はありますか?
または、これを簡単にするための別のツールセットについて何か提案はありますか?
お時間をいただきありがとうございます。よい一日を。