Postgresql
PostgreSQL 中的多個主鍵
我有下表:
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);
當我嘗試使用以下命令恢復它時:
psql -U postgres -h localhost -d word -f word.sql
它給了我這個錯誤:
不允許表“word”的多個主鍵
如何在 postgres 中使用多個主鍵?
如何在 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
inpsql
,例如:$ 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 $
看看它是如何在第一個錯誤處停止的?
(這將是預設設置,但這會破壞向後兼容性)。