Відповіді:
( Оновлено - Дякую людям, які коментували )
Припустимо, у вас є таблиця з назвою test1
, до якої ви хочете додати id
стовпчик автоматичного збільшення, первинного ключа (сурогат). У останніх версіях PostgreSQL наступної команди має бути достатньо:
ALTER TABLE test1 ADD COLUMN id SERIAL PRIMARY KEY;
У старих версіях PostgreSQL (до 8.x?) Вам довелося виконати всю брудну роботу. Наступна послідовність команд повинна зробити фокус:
ALTER TABLE test1 ADD COLUMN id INTEGER;
CREATE SEQUENCE test_id_seq OWNED BY test1.id;
ALTER TABLE test ALTER COLUMN id SET DEFAULT nextval('test_id_seq');
UPDATE test1 SET id = nextval('test_id_seq');
Знову ж таки, в останніх версіях Postgres це приблизно еквівалентно єдиній команді вище.
ADD PRIMARY KEY
також створюється NOT NULL
обмеження (тестоване в постгресах 9.3), як очікувалося і потрібно.
ALTER TABLE test1 ADD COLUMN id SERIAL PRIMARY KEY;
ALTER TABLE test1 ADD COLUMN id SERIAL PRIMARY KEY;
Це все, що вам потрібно:
id
стовпчикПодяка @resnyanskiy, який дав цю відповідь у коментарі.
ALTER TABLE <table> DROP CONSTRAINT <pkey_name>;
Щоб використовувати стовпчик ідентифікації в v10,
ALTER TABLE test
ADD COLUMN id { int | bigint | smallint}
GENERATED { BY DEFAULT | ALWAYS } AS IDENTITY PRIMARY KEY;
Для пояснення стовпців ідентифікацій див. Https://blog.2ndquadrant.com/postgresql-10-identity-column/ .
Про різницю між ЗАГАЛЕНОЮ ЗАВДАННЯМИ ТА ЗАГАЛЬНЕНОЮ ЗАВЖДИ, див. Https://www.cybertec-postgresql.com/en/sequences-gains-and-pitfalls/ .
Про зміну послідовності див. Https://popsql.io/learn-sql/postgresql/how-to-alter-sequence-in-postgresql/ .
SQL Error [23502]: ERROR: column "id" contains null values
Я приземлився тут, бо шукав щось подібне теж. У моєму випадку я копіював дані з набору послідовних таблиць з багатьма стовпцями в одну таблицю, а також присвоював ідентифікатори рядків цільовій таблиці. Ось варіант вищезазначених підходів, якими я користувався. Я додав послідовний стовпчик в кінці своєї цільової таблиці. Таким чином, я не повинен мати його заповнювача у виписці Insert. Потім простий вибір * в цільову таблицю автоматично заповнив цей стовпець. Ось два оператори SQL, які я використовував у PostgreSQL 9.6.4.
ALTER TABLE target ADD COLUMN some_column SERIAL;
INSERT INTO target SELECT * from source;