Как игнорировать ошибки с помощью psql copy meta-command

Я использую psql с базой данных PostgreSQL и следующее :

COPY isa (np1, np2, sentence) FROM 'c:Downloadsisa.txt' WITH DELIMITER '|'

Я:

ERROR:  extra data after last expected column

как я могу пропустить строки с ошибками?

1 ответов


вы не можете пропустить ошибки, не пропуская всю команду до и включая Postgres 9.5. В настоящее время нет более сложной обработки ошибок.

\copy - это просто оболочка вокруг SQL COPY что результаты каналов через psql. Руководство для COPY:

COPY останавливает работу при первой ошибке. это не должно приводить к проблемы в случае COPY TO, но цель таблица будет уже получили более ранние строки в COPY FROM. Эти строки не будут видимые или доступные, но они по-прежнему занимают место на диске. Это может количество значительное количество дискового пространства, если отказ произошло в большой операции копирования. Возможно, вы захотите вызвать VACUUM восстановить потерянное пространство.

жирным выделено мной. И:

COPY FROM вызовет ошибку, если какая-либо строка входного файла содержит больше или меньше столбцов, чем ожидалось.

было попытка добавить журнал ошибок в COPY в Postgres 9.0, возглавляемый Aster Data, но он никогда не был совершен. Позже компания была приобретена компанией Teradata, поэтому я сомневаюсь, что они все еще преследуют проект.

решение

вместо этого исправьте входной файл.

если у вас есть один или несколько дополнительных столбцов во входном файле и файл в противном случае последовательный, вы можете добавить фиктивные столбцы в таблице isa и бросьте их потом. Или (очиститель с производственными таблицами) импортировать во временную промежуточную таблицу и INSERT выбранные столбцы (или выражения) в целевую таблицу isa оттуда.

соответствующие ответы с подробными инструкциями: