Ответ 1
Задайте значение по умолчанию при добавлении нового столбца:
create sequence rid_seq;
alter table test add column rid integer default nextval('rid_seq');
Изменение значения по умолчанию для существующих столбцов не изменяет существующие данные, поскольку в базе данных нет способа узнать, какие значения должны быть изменены; флажок "этот столбец имеет значение по умолчанию" в значениях столбца, есть только значение по умолчанию (изначально NULL, поскольку вы ничего не указали) и текущее значение (также NULL), но способ сказать разницу между "NULL потому что это значение по умолчанию" и "NULL, потому что оно явно установлено в NULL". Итак, когда вы делаете это в два этапа:
- Добавить столбец.
- Измените значение по умолчанию.
PostgreSQL не будет применять значение по умолчанию к только что добавленному столбцу. Однако, если вы добавите столбец и укажите значение по умолчанию одновременно, PostgreSQL знает, какие строки имеют значение по умолчанию (все они), поэтому он может предоставлять значения при добавлении столбца.
Кстати, вы, вероятно, тоже хотите NOT NULL в этом столбце:
create sequence rid_seq;
alter table test add column rid integer not null default nextval('rid_seq');
И, как отмечает a_horse_with_no_name, если вы только собираетесь использовать rid_seq
для столбца test.rid
, тогда вы можете захотеть установите свой столбец владельца в test.rid
, чтобы последовательность была удалена, если столбец удален:
alter sequence rid_seq owned by test.rid;