我如何在postgres中使用多个主键?
你不能 这是矛盾的主键的定义是它是单数的主键。您不能超过一个。
您可以有多个unique
约束。您可以具有包含多个列的主键(复合主键)。但是一个表的主键不能超过一个。
但是,您显示的代码不会产生您提到的错误:
$ psql -U postgres regress <<__END__
CREATE TABLE word(
word CHARACTER VARYING NOT NULL,
id BIGINT NOT NULL,
repeat INTEGER NOT NULL
);
ALTER TABLE public.word OWNER TO postgres;
ALTER TABLE ONLY word ADD CONSTRAINT "ID_PKEY" PRIMARY KEY (word,id);
__END__
CREATE TABLE
ALTER TABLE
ALTER TABLE
$
猜测您实际上已经定义了该表,而您忽略了之前的错误,仅显示最后一个错误。如果我重新运行此代码,则会得到输出:
ERROR: relation "word" already exists
ALTER TABLE
ERROR: multiple primary keys for table "word" are not allowed
当然,这里的真正错误是第一个。
我强烈建议始终-v ON_ERROR_STOP=1
在中使用psql
,例如:
$ psql -v ON_ERROR_STOP=1 -U postgres regress <<__END__
CREATE TABLE word(
word CHARACTER VARYING NOT NULL,
id BIGINT NOT NULL,
repeat INTEGER NOT NULL
);
ALTER TABLE public.word OWNER TO postgres;
ALTER TABLE ONLY word ADD CONSTRAINT "ID_PKEY" PRIMARY KEY (word,id);
__END__
ERROR: relation "word" already exists
$
看到它如何在第一个错误处停止?
(这是默认设置,但会破坏向后兼容性)。