以下に示す簡単なデータベースで発生する奇妙なPostgresの問題に戸惑います。最初にタグを挿入してそのIDを明示的に指定してから、IDを渡さずに別のタグを挿入しようとすると、この2番目の挿入は失敗します。3回目(これもIDなしで)試行すると、挿入は成功します。
DROP DATABASE IF EXISTS mydb;
CREATE DATABASE mydb;
\c mydb
DROP SCHEMA public;
CREATE SCHEMA core;
CREATE TABLE core.tag
(
id serial PRIMARY KEY,
title text NOT NULL
);
-- this works: all columns specified explicitly
INSERT INTO core.tag(id, title) VALUES (1, 'known tag');
-- omitting the tag ID fails with
-- ERROR: duplicate key value violates unique constraint "tag_pkey"
-- DETAIL: Key (id)=(1) already exists.
INSERT INTO core.tag(title) VALUES ('unknown tag');
-- this works again ?!?
INSERT INTO core.tag(title) VALUES ('unknown tag');
この問題は、新しく作成されたデータベースでのみ発生するようであり、一度発生すると、再発することはないようです。私はこのようなものに出くわしたことはありません-これまでのところ、明示的なIDとAFAICSの有無にかかわらずデータを挿入しただけで、このように失敗したことはありません...
誰かがここで何が起こっているのか考えていますか?!?
環境:MacOSX10.7.5上のPostgreSQL9.1.3