私はPostgresがいくつかの初期データをインポートした後に重複したIDを訴えていて、IDカラムカウンタをインクリメントする方法を知りたいという問題がありますか?初期データの挿入後にPostgresがID「already exists」を返すのですか?
詳細:私は最近、idが私のSequelizeモデル定義にオートインクリメントに設定されているPostgresのテーブルの中にいくつかの初期データをアップロードした
。私はそれがKey (id)=(1) already exists
を文句新しいレコードを挿入しようとすると、私のNode.jsアプリケーションから
INSERT INTO "users" ("id","name") VALUES(1, "bob");
INSERT INTO "users" ("id","name") VALUES(2, "brooke");
INSERT INTO "users" ("id","name") VALUES(3, "nico");
:たとえば:
sequelize.define('user', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: Sequelize.STRING
}
データ挿入は次のようになります。 SQL Sequelizeを使用している形式は次のとおりです。
INSERT INTO "users" ("id","name") VALUES(DEFAULT, "nico");
私は、レコードのテーブルは空だと、私はカウンタはインクリメントを行い参照、もう一度これを試すかの操作に十分な時間を再試行した場合。問題は、Postgresがレコードに基づいて現在の最大IDを知ることができないようです。
初期データをデータベースにアップロードした後、Postgresにカウンタを更新するように指示する正しい方法は何でしょうか?
ところで使用してPostgresの
[Postgresql SERIALの動作は異なりますか?](https://stackoverflow.com/a/18389891/1995738) – klin
[シリアルタイプ](https://www.postgresql.org/docs/current/static/) datatype-numeric.html#DATATYPE-SERIAL) – klin
リンクされた記事に記載されている動作は、ここで見ている動作と一致します。 id値を手動で指定してもシーケンスは更新されません。 'DEFAULT'だけが値をインクリメントするので、シーケンスをリフレッシュすることが重要です。これは、たとえば、MySQLの場合と異なり、列の最大値に基づいて自動的に増分されます。 –