sql >> Databasteknik >  >> RDS >> PostgreSQL

Nytilldelad sekvens fungerar inte

Jag tror att ditt problem är att du ställer in allt detta för hand istället för att använda en serial kolumn. När du använder en serial kolumn kommer PostgreSQL att skapa sekvensen, ställa in lämpligt standardvärde och se till att sekvensen ägs av tabellen och kolumnen i fråga. Från den fina manualen :

Men du använder inte serial eller bigserial alltså pg_get_serial_sequence hjälper inte.

Du kan åtgärda detta genom att göra:

alter sequence new_user_messages_id owned by user_messages.id

Jag är inte säker på om detta är en komplett lösning och någon (hej Erwin) kommer förmodligen att fylla i de saknade bitarna.

Du kan spara lite problem här genom att använda serial som datatyp för ditt id kolumn. Det kommer att skapa och koppla upp sekvensen åt dig.

Till exempel:

=> 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. Är PL/SQL-variabler i markörer effektivt desamma som bindningsparametrar?

  2. Lösning av felaktig teckenkodning vid visning av MySQL-databasresultat efter uppgradering till PHP 5.3

  3. Hur jämför man datum i datetime-fält i Postgresql?

  4. Upptäcker låsta bord (låsta av LOCK TABLE)