2016-02-05 4 views
0

Я пытаюсь перенести данные из одной таблицы в другую:Не может пройти Postgres не нулевое ограничение

zuri=# INSERT INTO lili_code (uuid, arrow, popularname, slug, effdate, codetext)   
SELECT uuid, arrow, popularname, slug, effdate, codetext 
FROM newarts; 
ERROR: null value in column "shorttitle" violates not-null constraint 

Моим вопрос: shorttitle не является одной из колонок я пытался заполнить, так почему это имеет значение, если оно ноль или нет?

Обратите внимание:

  1. shorttitle пустой = True. Я понимаю, что это! = Null, но я подумал, что это может быть актуально.
  2. В lili_code есть много дополнительных столбцов, кроме коротких, которые не были в новых версиях.

В этот момент он смотрит на меня, как мои только опции

а. вставка вручную (yuck!)

б. создание csv и импорт, что

c. добавляя все недостающие столбцы от lili_code к newarts и удостоверяясь, что они NOT NULL и имеют по крайней мере значение по умолчанию в них.

Я пропустил вариант? Какое лучшее решение здесь? Я использую django 1.9.1, python 2.7.11, Ubuntu 15.10 и Postgresql 9.4.

Спасибо, что и всегда.

ответ

1

Поскольку столбец не является нулевым, вам необходимо указать значение.

Если для этого нет реальных данных, вы можете рассчитать его на лету в разделе SELECT вашего оператора INSERT, он не обязательно должен быть фактическим столбцом в исходной таблице.

Если вы хорошо с пустой строкой, вы можете сделать

INSERT INTO lili_code 
(uuid, arrow, popularname, slug, effdate, codetext, shorttitle)   
SELECT uuid, arrow, popularname, slug, effdate, codetext, '' 
FROM newarts; 

Или, может быть, вы хотите использовать popularname для этой колонки, а также:

INSERT INTO lili_code 
(uuid, arrow, popularname, slug, effdate, codetext, shorttitle)   
SELECT uuid, arrow, popularname, slug, effdate, codetext, popularname 
FROM newarts; 
1

Если вы не определите значение на INSERT db будет вставлять NULL или значение по умолчанию.

Если столбец не разрешает NULL, вы получите сообщение об ошибке. Таким образом, либо обеспечить фиктивное значение или изменить поле, чтобы NULL

1

Вы можете определить значение по умолчанию для столбца, например .:

alter table lili_code alter shorttitle set default ''; 
+0

это побеждает цель положить нон нулевое ограничение. –

+0

Я не знаю, что вы имеете в виду. Один не мешает другому. Они неплохо работают вместе. – klin

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