Postgresql игнорирует значение по умолчанию при массовом импорте

У меня есть БД postgres, запущенная в контейнере docker. Я пытаюсь массово импортировать csv с почтовыми индексами. Это проект Django.

Поскольку все они относятся к одному и тому же штату - "NSW". Этого столбца нет в CSV.

Моя модель (это django) имеет следующее определение для столбца State:

state = models.CharField(max_length=200, default="NSW", null=False, blank=False)

Но когда я пытаюсь выполнить, я получаю следующую ошибку:

postgres=# \COPY datacollector_localities(name, postcode) FROM '/postcodes-nsw.csv' DELIMITER ',' CSV HEADER;
ERROR:  null value in column "state" of relation "datacollector_localities" violates not-null constraint
DETAIL:  Failing row contains (5, Condobolin, 2877, null).
CONTEXT:  COPY datacollector_localities, line 2: "Condobolin,2877"

Я предполагал, что если оставить состояние вне списка column_names, то postgres будет использовать значение по умолчанию. Что я делаю неправильно?

Как указано в doc, значения по умолчанию применяются при создании экземпляра вашей модели.

По аналогии с auto_now эти вопросы не решаются с помощью DB trigger, поскольку это зависит от типа используемой БД.

Я не знаю, как работает импорт CSV (и вы не поделились кодом), но вам нужно сделать что-то вроде:

instances = []
for row in my_csv:
    instances.append(MyModel(**row.data))
MyModel.objects.bulk_create(instances)

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

Вернуться на верх