Может кто-нибудь объяснить мне, почему таблица PostgreSQL создана с помощью следующих сценариев:pg_dump последовательный тип данных выдает
CREATE TABLE users
(
"id" serial NOT NULL,
"name" character varying(150) NOT NULL,
"surname" character varying (250) NOT NULL,
"dept_id" integer NOT NULL,
CONSTRAINT users_pkey PRIMARY KEY ("id")
)
получает сброшена pg_dump
в следующем формате:
CREATE TABLE users(
"id" integer NOT NULL,
"name" character varying(150) NOT NULL,
"surname" character varying (250) NOT NULL,
"dept_id" integer NOT NULL
);
ALTER TABLE users OWNER TO postgres;
CREATE SEQUENCE "users_id_seq"
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER TABLE "users_id_seq" OWNER TO postgres;
ALTER SEQUENCE "users_id_seq" OWNED BY users."id";
ALTER TABLE ONLY users
ADD CONSTRAINT users_pkey PRIMARY KEY ("id");
Очевидно, что выше только небольшая выдержка из файла дампа.
Почему pg_dump
преобразование типов данных серийных в целом? Когда я восстанавливаю базу данных из сброшенного SQL-файла, это в значительной степени становится бесполезным, потому что автоинкрементация перестает работать, а при добавлении новых записей из front-end-формы она терпит неудачу с сообщением вдоль поля идентификаторов строк, которое не может быть пустым », очевидно потому что это первичный ключ, который не равен null, но автоинкремент должен начинать заполнять поле и заполнять его следующим значением в последовательности.
Я что-то упустил?
Какое совпадение: http://stackoverflow.com/q/33033642/2235885 (я полагаю, что это еще сентябрь?) Чтобы ответить на вопрос: серийный номер * не существует * serial - это просто сокращение для целого числа с default (последовательность). Обычно pg_dump выводит код для: (1) таблицы DDL, затем (2) вставляет данные, затем (3) создает последовательность + * прикрепляет * это к целочисленному полю + (4) устанавливает последовательность в максимальное число. – joop
Вау! Это не сентябрь, но это тоже было задано сегодня и почти так же, как моя проблема :). В моем случае последовательность также не установлена (SELECT pg_catalog.setval ('"users_id_seq", 1, false), пока она должна быть 178). Итак, как я могу гарантировать, что после восстановления автоинкрементация базы данных работает так же, как и до восстановления? – Peter
'Очевидно, что это только небольшая выдержка из файла дампа.' Прокрутите до конца dumpfile (используя ваш любимый редактор ;-) И: возможно, добавьте номера ответов postgres + pg_dump на ваш вопрос. BTW - это ваш вывод из * complete * pg_dump или с флагом '--schema only '? – joop