2016-10-12 19 views
1

nameをデータベースに挿入しようとしました。Postgresqlエラー:insert操作の戻り値がPythonに存在する

name = 'test' 
cur.execute("INSERT INTO scholars(name) VALUES('{}') returning id".format(name)) 
id = cur.fetchone() 
print(id) 

エラーメッセージ:

psycopg2.IntegrityError: duplicate key value violates unique constraint "idx_16514_primary" 
DETAIL: Key (id)=(2321) already exists. 

id=2301、それが成功すると、IDを返すとき。 その後、id += 1を返し、以下のエラーを返します。

http://ob9j09f06.bkt.clouddn.com/2016-10-12-16%3A31%3A12.jpg

+0

シーケンスを正しく更新せずに手動で値を挿入しましたか? –

+0

あなたのIDシーケンスに何か問題があるかもしれません。 'id curlval(pg_get_serial_sequence( 'scholars'、 'id'));'を実行すると、idシーケンスによって作成された最新の値が表示されます。 – kxxoling

答えて

1

あなたはすでにあなたのDBにID 2321でレコードを持っているように私には思えます。 SELECT id FROM scholarsで確認できますか?ここで

を@kxxoling e4c5 @

+0

しかし、新しいデータを挿入するときに手動でIDを追加する必要があります。 –

+0

私の推測:あなたがいくつかのレコードを削除した、またはいくつかのIDを手作業で作成したので、自動発電機に問題が生じました。 – Fejs

0

おかげで、私はこの質問への答えHow to reset postgres' primary key sequence when it falls out of sync?を得ました。

私のid sequenceに何か問題がありました。

これで解決しました。ここで

SELECT MAX(id) FROM scholars; 

=> 11518

SELECT nextval('scholars_id_seq'); 

=> 2324#それがmaxより低い(ID)

SELECT setval('scholars_id_seq', (SELECT MAX(id) FROM scholars)); 

=> 11518位

SELECT nextval('scholars_id_seq'); 

それを修正=> 11519#ノーマル

関連する問題