2016-11-14 2 views
1

の "重複したキーは、" 私はPostgreSQLのBIGSERIAL、挿入

INSERT INTO users (created_at) VALUES ('2016-11-10T09:37:59+00:00'); 

実行した後

INSERT INTO users (id) VALUES (1); 

を実行

CREATE TABLE users (
    id BIGSERIAL NOT NULL PRIMARY KEY, 
    created_at TIMESTAMP DEFAULT NOW() 
); 

まずテーブルを持っていると私は

ERROR: duplicate key value violates unique constraint "users_pkey" DETAIL: Key (id)=(1) already exists.

を取得します

"id"を自分で挿入するとIDシーケンスが増えないのはなぜですか?

答えて

2

SET句の列を省略するか、または特別な値を挿入すると、DEFAULT句のみが評価されるためです。

最初のINSERTでは、DEFAULT句は評価されないため、シーケンスは増加しません。 2番目のINSERTDEFAULT句を使用し、シーケンスは増加し、前のINSERTで明示的に指定された値と衝突する値1を返します。

列を明示的に指定するINSERTを使用してINSERTを自動値生成と組み合わせて使用​​しないでください。そうしなければならない場合は、値が衝突しないようにする必要があります。明示的にINSERTの自動生成された値と奇数のために偶数を使用します。

関連する問題