2016-09-01 2 views
2

Я пытаюсь вставить значения из запроса на выборку с помощью этого:PostgreSQL значение вставки из отборного запроса

INSERT INTO cb (vol_sec) 
SELECT sum(vol) 
FROM cb 
GROUP BY cusec; 

но сообщение об ошибке ОШИБКА: значение NULL для столбца «ид» ограничения нарушает не нуль. Я попытался изменить NOT NULL на NULL, но у меня есть другое сообщение. Столбец <> находится в первичном ключе. Есть ли способ избежать этих ошибок? Спасибо заранее.

+2

Не могли бы вы поделиться схемой таблицы? –

+1

Ваша целевая таблица как столбец 'id', который является первичным ключом (следовательно,' NOT NULL'), но не имеет значения по умолчанию. Вероятно, вам нужно добавить последовательность (или использовать существующую, если это необходимо) и установить 'DEFAULT' для' id', чтобы захватить следующее значение этой последовательности. Но, конечно, точные детали вашей схемы базы данных и/или способ использования этой таблицы могут влиять на то, что именно вы должны делать. – jcaron

+0

Из-за большого количества полей я мог бы поделиться схемой. – user19566

ответ

2

Там должны быть следовать шаг:

  1. падение ограничение PRIMARY KEY

    Alter Table schema.cb DROP CONSTRAINT name_of_constraint;

  2. обновить пролив не нуль.

    ALTER TABLE schema.cb ALTER COLUMN id DROP NOT NULL;

  3. выполнить вашу вставку.

2

Как id столбец в таблице назначения cb является первичным ключом, и вы, кажется, не определяет значение по умолчанию для любого id столбца.

, когда значение вставлено в cb Таблица отсутствует для первичного столбца id. поэтому вы получаете эту проблему.

ERROR: the value null for column «id» restriction violates not null.

попробовать присвоить значение столбца первичного ключа id. вы можете сделать это, изменив тип данных столбца на serial, он будет автоматически увеличиваться. удалить таблицу cb и создать с обновленным типом данных для id

--drop TABLE cb; 
    CREATE TABLE cb 
    (
     id integer serial, 
     vol_sec integer, 
     --other columns, 
     CONSTRAINT pk_id PRIMARY KEY (id) 
    ); 

надеюсь, что это работает для вас.

1

Сначала извиняюсь за задержку. Все ваши комментарии помогли мне решить проблему. Следуя предложенным шагам, я, наконец, получил, чтобы вставить столбец (id) в качестве серийного типа и выполнить запрос, данные были вставлены успешно. Благодарю.

+0

Вы должны принять ответ, который решил вашу проблему. –

Смежные вопросы