Jak mogę używać wielu kluczy podstawowych w Postgresie?
Nie możesz Jest to oksymoron - definicja klucza podstawowego jest taka, że jest to klucz podstawowy, liczba pojedyncza. Nie możesz mieć więcej niż jednego.
Możesz mieć wiele unique
ograniczeń. Możesz mieć klucz podstawowy zawierający wiele kolumn (złożony klucz podstawowy). Ale nie możesz mieć więcej niż jednego klucza podstawowego do tabeli.
Jednak wyświetlany kod nie powoduje wystąpienia wspomnianego błędu:
$ 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
$
Domyślam się, że już zdefiniowałeś tę tabelę i ignorujesz poprzednie błędy, a następnie wyświetlasz tylko ostatni. Jeśli ponownie uruchomię ten kod, otrzymam wynik:
ERROR: relation "word" already exists
ALTER TABLE
ERROR: multiple primary keys for table "word" are not allowed
Prawdziwy błąd tutaj jest oczywiście pierwszy.
Gorąco polecam zawsze używając -v ON_ERROR_STOP=1
w psql
, na przykład:
$ 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
$
Zobacz, jak to się kończy przy pierwszym błędzie?
(Byłoby to ustawienie domyślne, ale zepsułoby to kompatybilność wsteczną).