PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

BŁĄD:w Postgresie znaleziono więcej niż jedną posiadaną sekwencję

Aktualizacja: Ten błąd został naprawiony w PostgreSQL v12 za pomocą zatwierdzenia 19781729f78 .
Reszta odpowiedzi dotyczy starszych wersji.

serial kolumna ma sekwencję, której właścicielem jest kolumna i DEFAULT wartość, która otrzymuje wartość sekwencji netto.

Jeśli spróbujesz zmienić tę kolumnę na kolumnę tożsamości, otrzymasz błąd, że istnieje już wartość domyślna dla tej kolumny.

Teraz musiałeś usunąć domyślną wartość, ale nie sekwencję należącą do serial kolumna. Następnie, po przekształceniu kolumny w kolumnę tożsamości, utworzona została druga sekwencja należąca do tej kolumny.

Teraz, gdy próbujesz wstawić wiersz, PostgreSQL próbuje znaleźć i użyć sekwencja należąca do kolumny, ale są dwie, stąd komunikat o błędzie.

Twierdzę, że jest to błąd w PostgreSQL:moim zdaniem powinien albo zmienić istniejącą sekwencję dla kolumny tożsamości, albo dać ci błąd, że istnieje już sekwencja należąca do kolumny i powinieneś ją usunąć. Postaram się naprawić ten błąd .

W międzyczasie powinieneś ręcznie usunąć sekwencję pozostawioną z serial column.Uruchom następujące zapytanie:

SELECT d.objid::regclass
FROM pg_depend AS d
   JOIN pg_attribute AS a ON d.refobjid = a.attrelid AND
                             d.refobjsubid = a.attnum
WHERE d.classid = 'pg_class'::regclass
  AND d.refclassid = 'pg_class'::regclass
  AND d.deptype <> 'i'
  AND a.attname = 'patientid'
  AND d.refobjid = 'patient'::regclass;

To powinno dać ci nazwę sekwencji pozostawionej po serial kolumna. Upuść go, a kolumna tożsamości powinna zachowywać się zgodnie z oczekiwaniami.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Indeksowanie bazy danych w pigułce z porównaniem B+tree i Hash

  2. Przegląd buforowania zapytań PostgreSQL i równoważenia obciążenia

  3. Złe kodowanie między Springiem a PostgreSQL

  4. Zadanie pgAgent kończy się niepowodzeniem z błędem uwierzytelniania

  5. Jak zaprojektować schemat bazy danych do przechowywania tekstu w wielu językach?