Как импортировать данные фиксированной ширины в таблицу POSTGRESQL с помощью команды копирования - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь импортировать данные из текстового файла с фиксированной шириной в таблицу Postgres с помощью команды COPY. Указанный файл содержит приблизительно миллион записей шириной 1450 символов, большинство из которых представляют собой пустые места с полезными данными, разбросанными в заранее определенных местах в каждой строке.

При использовании команды COPY PSQL выдает следующую ошибку.

upi=# COPY issuer (stage)
upi-# FROM 'D:/UPI_Inward.txt';
ERROR:  literal newline found in data
HINT:  Use "\n" to represent newline.
CONTEXT:  COPY issuer, line 227040

Пожалуйста, объясните, какую ошибку он выдает, и предложите способ импорта строк из текстового файла в таблицу Postgres.

PS: упомянутая в коде таблица «эмитент» содержит два столбца ID bigint и stage character varying(1460), и я ожидаю, что PSQL импортирует каждую строку как отдельную запись с присвоенным ей идентификационным номером .

1 Ответ

0 голосов
/ 02 апреля 2020

Я полагаю, что сообщение об ошибке, о котором вы сообщаете (для ввода, отформатированного * TEXT), возможно только в том случае, если в вашем файле есть несовместимые разделители строк (используйте \ r, или \ n, или \ r \ n). Первое, что он увидел, было \ r, поэтому теперь он настаивает на том, чтобы использовать его в остальной части файла.

Либо вы переключились на использование \ n в качестве ограничителя строки, либо пытались встроить буквальный символ новой строки в середине строки. В первом случае вы не должны этого делать. Во втором случае вы должны заменить буквальный символ новой строки двухсимвольной escape-последовательностью \n. (Вы можете просто вставить обратную косую черту sh перед буквенным символом новой строки, но это не рекомендуется)

...