PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Criando uma sequência em uma tabela existente


Defina o valor padrão ao adicionar a nova coluna:
create sequence rid_seq;
alter table test add column rid integer default nextval('rid_seq');

Alterar o valor padrão para colunas existentes não altera os dados existentes porque o banco de dados não tem como saber quais valores devem ser alterados; não há o sinalizador "esta coluna tem o valor padrão" nos valores da coluna, há apenas o valor padrão (originalmente NULL, pois você não especificou mais nada) e o valor atual (também NULL), mas há uma maneira de dizer a diferença entre "NULL porque é o padrão" e "NULL porque foi definido explicitamente como NULL". Então, quando você faz isso em duas etapas:
  1. Adicionar coluna.
  2. Altere o valor padrão.

O PostgreSQL não aplicará o valor padrão à coluna que você acabou de adicionar. No entanto, se você adicionar a coluna e fornecer o valor padrão ao mesmo tempo, o PostgreSQL saberá quais linhas têm o valor padrão (todas elas) para que possa fornecer valores à medida que a coluna é adicionada.

A propósito, você provavelmente quer um NOT NULL nessa coluna também:
create sequence rid_seq;
alter table test add column rid integer not null default nextval('rid_seq');

E, como a_horse_with_no_name notas, se você pretende usar apenas rid_seq para seu test.rid coluna, você pode querer definir sua coluna proprietária para test.rid para que a sequência seja descartada se a coluna for removida:
alter sequence rid_seq owned by test.rid;