バックグラウンド:
私が現在開発しているアプリケーションは、SQLite3 から PostgreSQL に移行中です。.dump
現在のデータベースから を使用して、タイプのすべてのテーブルを変更して、すべてのデータが正常に移行されました
CREATE TABLE foo (
id INTEGER NOT NULL,
bar INTEGER,
...
PRIMARY KEY (id),
FOREIGN KEY(bar) REFERENCES foobar (id),
...
);
に
CREATE TABLE foo (
id SERIAL NOT NULL,
bar INTEGER,
...
PRIMARY KEY (id),
FOREIGN KEY(bar) REFERENCES foobar (id) DEFERRABLE,
...
);
とSET CONSTRAINTS ALL DEFERRED;
。
私はSQLAlchemyを使用しているので、それ以降はスムーズに動作することを期待していました.もちろんengine
. しかし、問題は、主キーの一意の値への自動インクリメントにあるようINSERT
です。
たとえばfoo
、現在 7500 行以上あるテーブルで問題が発生していますが、シーケンスがfoo_id_seq
オンcurrent value
に設定されてい5
ます (挿入を 5 回試行しましたが、すべて失敗したためです)。
質問:
id
だから私の質問は、ステートメントで ,を明示的に指定せずにINSERT
、どうすれば Postgres に一意の値をid
フィールド ifに自動的に割り当てることができるかということfoo
です。またはより具体的には、シーケンスに一意の値を返すようにしますか?
砂糖:
SQLAlchemy インターフェースを介してこれらすべてを実現します。
環境の詳細:
- パイソン 2.6
- SQLAlchemy 8.2
- PostgreSQL 9.2
- psycopg2 - 2.5.1 (dt dec pq3 ext)
PS: この質問により適切なタイトルを見つけた場合は、編集してください。