我对在下面显示的普通数据库中遇到的一个奇怪的 Postgres 问题感到困惑:如果我首先插入一个标签并明确指定其 ID,然后尝试在不传递 ID 的情况下插入另一个标签,那么第二次插入将失败。如果我第三次尝试(再次没有 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 的数据,从来没有像这样失败过......
有谁知道这里发生了什么?!?
环境:Mac OSX 10.7.5 上的 PostgreSQL 9.1.3