Při přidávání nového sloupce nastavte výchozí hodnotu:
create sequence rid_seq;
alter table test add column rid integer default nextval('rid_seq');
Změna výchozí hodnoty pro existující sloupce nezmění existující data, protože databáze nemá žádný způsob, jak zjistit, které hodnoty by se měly změnit; u hodnot sloupců není žádný příznak „tento sloupec má výchozí hodnotu“, existuje pouze výchozí hodnota (původně NULL, protože jste nezadali nic jiného) a aktuální hodnota (také NULL), ale způsob, jak zjistit rozdíl mezi „NULL protože je výchozí" a "NULL, protože byla explicitně nastavena na NULL". Takže, když to uděláte ve dvou krocích:
- Přidat sloupec.
- Změňte výchozí hodnotu.
PostgreSQL nepoužije výchozí hodnotu na sloupec, který jste právě přidali. Pokud však přidáte sloupec a zároveň dodáte výchozí hodnotu, PostgreSQL ví, které řádky mají výchozí hodnotu (všechny), takže může dodávat hodnoty při přidávání sloupce.
Mimochodem, pravděpodobně budete chtít v tomto sloupci také NOT NULL:
create sequence rid_seq;
alter table test add column rid integer not null default nextval('rid_seq');
A jako a_horse_with_no_name
poznámky, pokud máte v úmyslu použít pouze rid_seq
pro váš test.rid
pak možná budete chtít nastavit jeho sloupec vlastníka
na test.rid
takže sekvence bude zrušena, pokud je sloupec odstraněn:
alter sequence rid_seq owned by test.rid;