2015-10-19 3 views
0

Я пытаюсь сделать то, что описано в this solution, а также here. Это означает, что я хотел бы копировать строки со многими столбцами при изменении только нескольких значений. Так что мой запрос выглядит следующим образом:Копирование строк нарушает непустое ограничение в PostgreSQL

CREATE TEMPORARY TABLE temp_table AS 
    SELECT * FROM original_table WHERE <conditions>; 

UPDATE temp_table 
    SET <auto_inc_field>=NULL, 
     <fieldx>=<valuex>, 
     <fieldy>=<valuey>; 

INSERT INTO original_table SELECT * FROM temporary_table; 

Однако <auto_inc_field>=NULL часть не работает для меня, соответственно, моей базы данных PostgreSQL 9.4:

Exception: null value in column "auto_inc_field" violates not-null constraint 

<auto_inc_field> столбца определяется как BIGINT, последовательный порт, и имеет ограничение первичного ключа.

Что мне нужно передать, если NULL не работает? Есть ли альтернативный метод?

+0

Что такое определение ''? Он должен принимать значение null. –

+0

Обновлен вопрос. У этого есть основное ограничение. Есть ли способ сделать эту работу? – n1000

ответ

1

Я понимаю, что первичный ключ serial. Список всех столбцов, но первичный ключ в команде insert. Перечислите соответствующие колонки и значения в команде select:

insert into original_table (col_1, col_2, col_3) 
select col_1, value_2, value_2 
from original_table 
where the_conditions; 
+0

ok - это прагматическая версия: D Мой вопрос просят о том, чтобы изящный;) – n1000

+0

@ n1000 Я не знаю более элегантного. Ты? Что не элегантно? –

+0

Я имел в виду это [вопрос/ответ] (http://stackoverflow.com/a/15344327/2075003), который я не мог получить в своей настройке. – n1000

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