Postgres: разница между DEFAULT в CREATE TABLE и ALTER TABLE в дампе базы данных - PullRequest
0 голосов
/ 06 марта 2019

В дампе базы данных, созданном с помощью pg_dump, некоторые таблицы имеют DEFAULT s в операторе CREATE TABLE, то есть:

CREATE TABLE test (
  f1 integer DEFAULT nextval('test_f1_seq'::regclass) NOT NULL
);

Но другие имеют дополнительный оператор ALTER:

ALTER TABLE ONLY test2 ALTER COLUMN f1 SET DEFAULT nextval('test2_f1_seq'::regclass);

В чем причина этого?Все последовательные поля были созданы с типом SERIAL, но в дампе они выглядят по-разному, и я не могу угадать какое-либо правило для этого.

1 Ответ

0 голосов
/ 06 марта 2019

Разница должна заключаться в том, что в первом случае последовательность «принадлежит» столбцу таблицы.

Вы можете указать эту зависимость, используя предложение OWNED BY при создании последовательности.Последовательность, которой принадлежит столбец, будет автоматически отброшена, когда столбец имеет значение.

Если последовательность неявно создается с помощью serial, она будет принадлежать столбцу.

...