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

Nowo przypisana sekwencja nie działa

Myślę, że twój problem polega na tym, że ustawiasz to wszystko ręcznie, a nie za pomocą serial kolumna. Kiedy używasz serial kolumna, PostgreSQL utworzy sekwencję, ustawi odpowiednią wartość domyślną i upewni się, że sekwencja jest własnością danej tabeli i kolumny. Z dokładnej instrukcji :

Ale nie używasz serial lub bigserial więc pg_get_serial_sequence nie pomoże.

Możesz temu zaradzić, wykonując:

alter sequence new_user_messages_id owned by user_messages.id

Nie jestem pewien, czy jest to kompletne rozwiązanie i ktoś (cześć Erwin) prawdopodobnie uzupełni brakujące fragmenty.

Tutaj możesz zaoszczędzić sobie trochę kłopotów, używając serial jako typ danych Twojego id kolumna. To utworzy i połączy sekwencję dla Ciebie.

Na przykład:

=> create sequence seq_test_id;
=> create table seq_test (id integer not null default nextval('seq_test_id'::regclass));
=> select pg_catalog.pg_get_serial_sequence('seq_test','id');
 pg_get_serial_sequence 
------------------------

(1 row)
=> alter sequence seq_test_id owned by seq_test.id;
=> select pg_catalog.pg_get_serial_sequence('seq_test','id');
 pg_get_serial_sequence 
------------------------
 public.seq_test_id
(1 row)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL:Zalety ENUM w porównaniu z relacją jeden-do-wielu?

  2. Jak mogę zaimportować plik JSON do PostgreSQL?

  3. Niekompatybilność Openshift i net-ssh? (2.9.3-beta1 vs 2.9.2)

  4. Wzorce i modyfikatory szablonów do formatowania daty/godziny w PostgreSQL

  5. Wypełnij tabelę danymi dla brakującej daty (postgresql, redshift)