У меня есть две таблицы А (идентификатор, col1, col2) и B (col3, COL4, col5, col6)POSTGRESQL: INSERT INTO ... SELECT с автоматическим генерируемый столбец
столбец "Идентификатор" в таблице A это автоматический сгенерированный, а не нулевой первичный ключ.
Чтобы вставить данные из таблицы B в таблице А, я пытаюсь
INSERT INTO A(col1, col2)
(SELECT col3, col4 from B)
Это утверждение бросает ошибка
ERROR: null value in column "id" violates not-null constraint
DETAIL: Failing row contains (null, "abc", "def")
Я также попытался
INSERT INTO A(id, col1, col2)
(SELECT DEFAULT, col3, col4 from B)
это бросает ошибку
ERROR: syntax error at or near "DEFAULT"
Почему postgres не генерирует автоматически значение для столбца «id»? Запрос работает, если я предоставляю «id» из таблицы B или если я вставляю одну строку (без выбора) и предоставляю ключевое слово «DEFAULT» для автоматически созданного столбца.
EDIT: создание таблицы запроса
CREATE TABLE A
(
id bigint NOT NULL,
col1 character varying(10),
col2 character varying(10),
CONSTRAINT A_pk PRIMARY KEY (id)
);
ALTER TABLE A OWNER TO user1;
CREATE SEQUENCE A_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER TABLE A_id_seq OWNER TO user1;
ALTER SEQUENCE A_id_seq OWNED BY A.id;
Поделиться создайте запрос таблицы, который вы использовали для создания таблицы. –
@ Code-Monk CREATE TABLE A (id bigint NOT NULL, символ col1, различающийся (10), col2-символ, изменяющийся (10), CONSTRAINT A_pk ПЕРВИЧНЫЙ КЛЮЧ (id)); ALTER ТАБЛИЦА ВЛАДЕЛЬЦА К user1; СОЗДАТЬ ПОСЛЕДОВАТЕЛЬНОСТЬ A_id_seq НАЧАТЬ С 1 ИНКРЕМЕНТОМ НА 1 НЕТ МИНВАЛА НЕТ МАКСИАЛЬНОЙ КАРЕ 1; ALTER TABLE A_id_seq OWNER TO user1; ALTER SEQUENCE A_id_seq OWNED BY A.id; –