Imposta il valore predefinito quando aggiungi la nuova colonna:
create sequence rid_seq;
alter table test add column rid integer default nextval('rid_seq');
La modifica del valore predefinito per le colonne esistenti non modifica i dati esistenti poiché il database non ha modo di sapere quali valori devono essere modificati; non c'è il flag "questa colonna ha il valore predefinito" sui valori delle colonne, c'è solo il valore predefinito (originariamente NULL poiché non hai specificato nient'altro) e il valore corrente (anche NULL) ma un modo per distinguere tra "NULL perché è l'impostazione predefinita" e "NULL perché è stato impostato esplicitamente su NULL". Quindi, quando lo fai in due passaggi:
- Aggiungi colonna.
- Cambia il valore predefinito.
PostgreSQL non applicherà il valore predefinito alla colonna che hai appena aggiunto. Tuttavia, se aggiungi la colonna e fornisci il valore predefinito allo stesso tempo, PostgreSQL saprà quali righe hanno il valore predefinito (tutte) quindi può fornire valori man mano che la colonna viene aggiunta.
A proposito, probabilmente vorrai anche un NOT NULL su quella colonna:
create sequence rid_seq;
alter table test add column rid integer not null default nextval('rid_seq');
E, come a_horse_with_no_name
note, se intendi utilizzare solo rid_seq
per il tuo test.rid
colonna quindi potresti voler impostare la sua colonna proprietario
a test.rid
in modo che la sequenza venga eliminata se la colonna viene rimossa:
alter sequence rid_seq owned by test.rid;