ОШИБКА: отсутствуют данные для столбца при использовании \copy в psql

Я пытаюсь импортировать файл .txt в PostgreSQL. Текстовый файл имеет 6 столбцов:

Laboratory_Name Laboratory_ID   Facility    ZIP_Code     City   State

И 213 рядов.

Я пытаюсь использовать \copy, чтобы поместить содержимое этого файла в таблицу с именем doe2 в PostgreSQL, используя эту команду:

\copy DOE2 FROM '/users/nathangroom/desktop/DOE_inventory5.txt' (DELIMITER(' '))

Это дает мне эту ошибку:

missing data for column "facility"

Я все искал, что делать, когда сталкиваюсь с этой ошибкой, и ничего не помогло. кто-нибудь еще сталкивался с этим?


person nathanmgroom    schedule 05.11.2014    source источник
comment
Как выглядят данные в файле? (Несколько строк стоит образец.)   -  person khampson    schedule 05.11.2014


Ответы (1)


Три возможные причины:

  1. В одной или нескольких строках вашего файла не более 4 символов пробела (ваш разделитель).

  2. #P3# <блочная цитата> #P4#

Вывод из COPY TO или pg_dump не будет показывать ни одной из этих ошибок при чтении из таблицы с соответствующим макетом. Но, может быть, ваш файл был отредактирован или взят из другого неисправного источника?

  1. Вы используете не тот файл, который, думаете, используете. Метакоманда \copy интерфейса командной строки psql представляет собой оболочку для COPY и считывает файлы, локальные для клиента. Если ваш файл находится на сервере, используйте команду SQL COPY. вместо.
person Erwin Brandstetter    schedule 05.11.2014
comment
Я не думаю, что это первое, потому что я изменил свой разделитель на «,», и произошло то же самое. Я не думаю, что это второй, потому что у меня нет ни одной обратной косой черты во всем моем файле (я выполнил поиск с помощью ctrl-F). Если это 3-й, я не знаю, как это исправить. Я пытаюсь выполнить команду COPY в графическом интерфейсе pgadmin и получаю следующую ошибку: ОШИБКА: не удалось открыть файл /users/nathangroom/desktop/DOE_inventory5.txt для чтения: Отказано в доступе. В другом месте на StackOverflow я видел, что использование команды \copy в командной оболочке было решением этой ошибки. - person nathanmgroom; 05.11.2014
comment
@nathanmgroom: Где твой файл? Где сервер Postgres? Где ваш клиент? Кроме того, вы не можете просто изменить разделитель произвольно. Это должен быть тот, который используется в вашем файле. Что это? По умолчанию используется символ табуляции в текстовом формате. - person Erwin Brandstetter; 05.11.2014
comment
Файл на моем рабочем столе, я не знаю точно, где сервер postgres и клиент, но я знаю, что все это локально, на моей машине. Сервер говорит, что это локальный хост 5432. Я попробовал еще раз, сохранив его как csv, и получаю эту ошибку: ОШИБКА: неверный синтаксис ввода для целого числа: Labor_ID Что не имеет смысла, потому что в этом столбце определенно есть целое число. - person nathanmgroom; 05.11.2014
comment
@nathanmgroom: последняя ошибка указывает на то, что вы включили строку заголовка с именами каждого столбца, что разрешено в режиме csv с использованием параметра HEADER, но не в текстовом режиме (по умолчанию). Удалите строку и повторите попытку. Кроме того, если все выполняется локально, вы можете использовать как \copy, так и COPY — оба имеют доступ к одной и той же файловой системе. Но COPY более ограничен в правах. - person Erwin Brandstetter; 05.11.2014
comment
Привет, я попробовал это, и это устранило эту ошибку, но теперь я получаю новую ошибку, ту, которую я получил изначально: \copy DOE3 from '/users/nathangroom/desktop/DOE_inventory2.csv' (DELIMITER(',') ) ОШИБКА: отсутствуют данные для столбца ПОЧТОВЫЙ ИНДЕКС КОНТЕКСТ: КОПИРОВАТЬ doe3, строка 1: DOE, Лаборатория Эймса, 1, Центр подготовки материалов, Центр технических и административных услуг - person nathanmgroom; 05.11.2014
comment
Этот ответ работает для меня. У меня была такая же ошибка, и я обнаружил, что подсказка была точка 1. Одно из полей данных в моем .csv содержало запятую из-за ошибочного преобразования инструментом, который я использовал. Повторное преобразование данных в csv с помощью лучшего инструмента решило проблему. Спасибо! - person Lym; 21.09.2015
comment
Я отредактировал его с помощью ‹вашего редактора здесь›, и он удалил пробелы в конце строки! :-О - person Manel Clos; 26.03.2020