Скопируйте текстовый файл, используя postgres с пользовательским разделителем по размеру символа - PullRequest
1 голос
/ 26 сентября 2019

Мне нужно скопировать текстовый файл, который содержит запутанный разделитель.Я считаю, что разделителем является пространство.Однако некоторые значения столбца пусты, и я не могу различить, какой столбец затрудняет загрузку данных в базу данных, поскольку пространство ничего не указывает.Таким образом, когда я пытаюсь COPY, сопоставление не правильно, и я получаю ОШИБКА: дополнительные данные после последнего ожидаемого столбца

Я попытался изменить разделитель на запятую и т. Д.Я все еще получаю ту же ошибку выше.Приведенный ниже код можно использовать, когда я пытаюсь загрузить некоторые фиктивные данные с правильным разделителем.

COPY usm00070219(HEADREC_ID,YEAR,MONTH,DAY,HOUR,RELTIME,NUMLEV,P_SRC,NP_SRC,LAT,LON) FROM 'D:\....\USM00070219-data.txt' DELIMITER ' ';

Это пример данных:

enter image description here Он должен иметь11 столбцов, но данные в первой строке - только 10, и он не может идентифицировать пустой столбец значений.Интервалы вообще не помогают!

Можно ли как-нибудь разделить столбцы по размеру символа в качестве разделителя и принудительно разделить данные на заданный размер?

1 Ответ

0 голосов
/ 26 сентября 2019

COPY не предназначен для обработки текстовых файлов фиксированной ширины.Я могу придумать два варианта:

  • Загрузить файл как есть в таблицу с одним текстовым столбцом, используя COPY.Затем используйте regexp_split_to_array, чтобы разделить его на компоненты и вставить их в другую таблицу.

  • Вы можете использовать file_fdw , чтобы создать чужую таблицу с одним текстовым столбцомкак выше и оперируйте этим.Это экономит загрузку файла в базу данных.

  • Существует сторонняя оболочка данных для текстовых файлов фиксированной ширины , которую вы можете попробовать.

...