Establezca el valor predeterminado cuando agregue la nueva columna:
create sequence rid_seq;
alter table test add column rid integer default nextval('rid_seq');
Alterar el valor predeterminado para las columnas existentes no cambia los datos existentes porque la base de datos no tiene forma de saber qué valores se deben cambiar; no hay un indicador de "esta columna tiene el valor predeterminado" en los valores de columna, solo existe el valor predeterminado (originalmente NULL ya que no especificó nada más) y el valor actual (también NULL), pero es una forma de diferenciar entre "NULL porque es el predeterminado" y "NULL porque se estableció explícitamente en NULL". Entonces, cuando lo haces en dos pasos:
- Añadir columna.
- Cambiar valor predeterminado.
PostgreSQL no aplicará el valor predeterminado a la columna que acaba de agregar. Sin embargo, si agrega la columna y proporciona el valor predeterminado al mismo tiempo, PostgreSQL sabe qué filas tienen el valor predeterminado (todas) para que pueda proporcionar valores a medida que se agrega la columna.
Por cierto, probablemente también quieras un NOT NULL en esa columna:
create sequence rid_seq;
alter table test add column rid integer not null default nextval('rid_seq');
Y, como a_horse_with_no_name
notas, si solo tiene la intención de usar rid_seq
para su test.rid
entonces es posible que desee establecer su columna de propietario
a test.rid
para que la secuencia se elimine si se elimina la columna:
alter sequence rid_seq owned by test.rid;