2012-04-04 8 views
2

データベース移行プログラムで作業していますが、テーブルがすでに作成されている別のデータベースに1つのデータベースを移行しようとしています。より具体的には、私はほぼ同じテーブルを持つ2つのデータベースを持っており、1つはいっぱいで、もう1つは空です。私の問題は、移行テーブルの値がアルファベット順に処理されていることです。いくつかのテーブルには外部キーがあります。これらのテーブルが外部キーテーブルのアルファベットの前に来ると、私は値を挿入できません。 javaまたはpostgresqlで外部キーチェックを無効にする方法はありますか?どんな助けも素晴らしいだろう。外部キー制約のためにデータベースの挿入が失敗する

答えて

2

私が正しければ、postgresqlでfkを無効にすることはできません。 @mcfinniganは言ったように、挿入を開始する前にfkを落とすことができます。あるいは、DEFERRABLEキーを使って制約を再作成することもできます。 postgresql CREATE TABLE documentation.

DEFFERABLEは、トランザクションが終了するまでfkがチェックされないことを意味します。

+0

テーブルの遅延を設定できる更新ステートメントはありますか? – mbaydar

+0

テーブルの制約を変更することはできません。 alter table文で追加または削除することができます。 ALTER TABLE xxx ADD CONSTRAINT fk_xxx [...]またはALTER TABLE xxx DROP CONSTRAINT fk_xxx。制約定義にDEFFERABLEキーを与えてテーブルを再作成する必要があります。次に、DEFFERABLEキーでcontraintを作成する場合は、 "SET CONSTRAINTS DEFERRED"を呼び出す必要があります。 – Aykut

2

参照整合性は、JDBCプロパティではなくDBプロパティです。インポートを実行する前に明示的にデータベースのFK制約を削除または無効にしてから、後で再び有効にする必要があります。

データの階層構造を決定し、最初に独立したレコードで始まるデータを挿入し、挿入中に従属レコードをこれらのレコードにリンクすることをお勧めします。

+0

ありがとうございました。私は最初のものを試してみる。 2番目はとても複雑なことがあります。 – mbaydar

関連する問題