Mam tabelę w PostgreSQL z 22 kolumnami i chcę dodać klucz podstawowy automatycznego przyrostu.
Próbowałem utworzyć kolumnę id
typu BIGSERIAL, ale pgadmin odpowiedział błędem:
ERROR: sequence must have same owner as table it is linked to.
Czy ktoś wie, jak rozwiązać ten problem? Jak dodać utworzyć autokrementujący klucz podstawowy w PostgreSQL bez ponownego tworzenia tabeli?
sql
postgresql
mkn
źródło
źródło
ALTER TABLE mytable ADD PRIMARY KEY (column);
. Postgresql sprawdzi, czy kolumna nie zawiera wartości NULL.bigserial
iserial
dają ten sam błąd:ERROR: syntax error at or near "BIGSERIAL"
Automatyczne zwiększanie klucza podstawowego w postgresql:
Krok 1, stwórz swój stół:
Krok 2, wstaw wartości do tabeli w ten sposób, zauważ, że klucz mytable_ nie jest określony na liście pierwszych parametrów, powoduje to automatyczne zwiększenie wartości domyślnej sekwencji.
Krok 3, wybierz * ze stołu:
Krok 4, zinterpretuj wynik:
Zauważ, że kolumna mytable_key została automatycznie zwiększona.
Porada:
Zawsze powinieneś używać klucza podstawowego na stole, ponieważ postgresql wewnętrznie używa struktur tabeli mieszających, aby zwiększyć szybkość wstawiania, usuwania, aktualizacji i selekcji. Jeśli dostępna jest kolumna klucza podstawowego (która jest wymuszona jako unikatowa i nie jest pusta), można na niej polegać, aby zapewnić unikalne ziarno dla funkcji skrótu. Jeśli kolumna klucza podstawowego nie jest dostępna, funkcja skrótu staje się nieefektywna, gdy wybiera inny zestaw kolumn jako klucz.
źródło
SERIAL
tworzysequence
kulisy: postgresql.org/docs/9.2/static/…thing_id int references epictable(mytable_key)
pracą?Utwórz automatycznie zwiększający klucz podstawowy w postgresql, korzystając z niestandardowej sekwencji:
Krok 1, utwórz sekwencję:
Krok 2, stwórz swój stół
Krok 3, włóż do stołu
Krok 4, obserwuj rzędy
Dwa rzędy mają klucze, które zaczynają się od 1 i są zwiększane o 1, zgodnie z sekwencją.
Bonus Elite ProTip:
Programiści nie znoszą pisania, a pisanie
nextval('splog_adfarm_seq')
jest denerwujące. Zamiast tego możesz wpisaćDEFAULT
ten parametr:Aby powyższe zadziałało, musisz zdefiniować domyślną wartość dla tej kolumny klucza w tabeli splog_adfarm. Co jest ładniejsze.
źródło
Jeśli chcesz to zrobić w pgadmin, jest to o wiele łatwiejsze. Wydaje się, że w postgressql, aby dodać automatyczny przyrost do kolumny, najpierw musimy utworzyć sekwencję automatycznego przyrostu i dodać ją do wymaganej kolumny. Podobało mi się
1) Najpierw musisz upewnić się, że jest klucz podstawowy do twojego stołu. Zachowaj także typ danych klucza podstawowego w bigint lub smallint. (Użyłem biginta, nie mogłem znaleźć typu danych o nazwie serial, jak wspomniano w innych odpowiedziach gdzie indziej)
2) Następnie dodaj sekwencję, klikając prawym przyciskiem myszy sekwencję-> dodaj nową sekwencję . Jeśli w tabeli nie ma danych, pozostaw tę sekwencję bez zmian, nie wprowadzaj żadnych zmian. Po prostu to zapisz. Jeśli istnieją dane, dodaj ostatnią lub najwyższą wartość w kolumnie klucza podstawowego do bieżącej wartości w zakładce Definicje, jak pokazano poniżej.
3) Na koniec dodaj linię
nextval('your_sequence_name'::regclass)
do wartości domyślnej w kluczu podstawowym, jak pokazano poniżej.Upewnij się, że nazwa sekwencji jest tutaj poprawna. To wszystko i automatyczny przyrost powinien działać.
źródło
Jeśli chcesz używać liczb w sekwencji, zdefiniuj nową sekwencję za pomocą czegoś podobnego
a następnie zmień tabelę, aby użyć sekwencji dla identyfikatora:
źródło
Próbowałem następującego skryptu, aby pomyślnie automatycznie zwiększyć klucz podstawowy w PostgreSQL.
EDYTOWAĆ:
Słowo kluczowe SERIAL automatycznie tworzy sekwencję dla odpowiedniej kolumny.
źródło
ALTER SEQUENCE dummytable_id_seq RESTART WITH 1;
i działa.Może trochę spóźniłem się z odpowiedzią na to pytanie, ale pracuję nad tym tematem w mojej pracy :)
Chciałem napisać kolumnę „a_code” = c1, c2, c3, c4 ...
Najpierw otworzyłem kolumnę z nazwą
ref_id
i typemserial
. Następnie rozwiązałem problem z tym poleceniem:źródło