sql >> Databáze >  >> RDS >> PostgreSQL

Nově přiřazená sekvence nefunguje

Myslím, že váš problém je v tom, že to všechno nastavujete ručně, nikoli pomocí serial sloupec. Když použijete serial PostgreSQL vytvoří sekvenci, nastaví příslušnou výchozí hodnotu a zajistí, že sekvence je vlastněna danou tabulkou a sloupcem. Z dobré příručky :

Ale nepoužíváte serial nebo bigserial takže pg_get_serial_sequence nepomůže.

Můžete to napravit takto:

alter sequence new_user_messages_id owned by user_messages.id

Nejsem si jistý, jestli je to kompletní řešení a někdo (ahoj Erwine) pravděpodobně doplní chybějící kousky.

Zde si můžete ušetřit problémy použitím serial jako datový typ vašeho id sloupec. To vytvoří a zapojí sekvenci za vás.

Například:

=> 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. pole oddělené čárkami pro porovnání v mysql

  2. SQL Server:sys.master_files vs. sys.database_files

  3. Zabezpečení serveru MySQL

  4. Připravený výpis MySql Connector přenáší pouze 64 bajtů