2017-05-18 20 views
0

Amazonのデータベース移行ツールを使用して、EC2上のPostgreSQLデータベースからRDSインスタンスへの移行を行いました。Amazon RDS Postgresqlプライマリキーが割り当てられていない

私のアプリケーションは、Python 3.4でsqlalchemyを使用しています。移行後、データベースに新しいデータを追加しようとすると、エラーが発生します。sqlalchemy.exc.IntegrityError: (psycopg2.IntegrityError) null value in column "id" violates not-null constraint

データベースをpg_adminでチェックして、テーブルのusers_pkey制約としてALTER TABLE public.users ADD COSTRAINT users_pkey PRIMARY KEY(id);を表示します。

アプリケーションはエラーなしでデータを読み取り、既存のデータを変更できます。

+0

これは、自動的に割り当てられるために必要なものではありません。デフォルト値はありますか? – stdunbar

+0

いいえ、以前はデフォルト値なしで動作していました。 インデックスを付けるオプションは冗長ですが、列を指定するコードは変更されておらず、プライマリキーは以前に割り当てられています – brandonjschwartz

+0

"古い"データベースにデフォルト値がありましたか?私の経験では、PostgreSQLはAWS RDS環境ではローカルまたはEC2とまったく同じです。スクリプトを使用してデータベースをローカルに作成し、RDS上で作成し、「うまく動作します」。私は失われているもののように感じる。 – stdunbar

答えて

0

@stdunbarこれに正しい方向に私を指摘、ありがとうございます。

これは完全な「回答」であるかどうかはわかりませんが、問題の解決方法を理解するには時間がかかりました。

@studunbarは、RDSデータベースに反映された内容を確認するように指示しました。ドキュメントはこれを暗示していますが、私にはわかりません.DMSは、シーケンス、インデックス、または外部キーの関係をコピーしません。私は事実の後でこれを行うためにスキーマ移行ツールを使用しようとしたところ、私のデータを一掃しました。以前は使用していたマイグレーションスクリプトが実行されませんでした。

これはユーザーの誤りである可能性があります。しかし、私の修正はpg_dumpとpg_restoreを使ってDMSを完全にバイパスして移行することでした。私はこれがPostgreSQLにのみ適用されることを認識しています。

AWSのドキュメントでは、可能であればネイティブツールを使用することを簡潔に示唆しています。

関連する問題