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)