Я использую lo_import для загрузки большого текстового файла, содержащего строки, разделенные знаком |, но каждая строка может иметь переменное количество полей, например,
REC1 | 1 | 2 | 3 | REC2 | 1 | 2 | 3 | 4 | 5 | REC3 | 1 |
Я хочу получить каждую строку и вставить в другую таблицу, содержащую столбец varchar []. В настоящее время я использую:
string_to_array (rtrim (unnest (string_to_array (replace (convert_from (lo_get (vFileOID), 'utf8'), chr (13), ''), chr (10))), '|'), '|')
Я избавляюсь от chr (13), поскольку файл может иметь CR / LF (windows) или просто LF (unix)
Я также RTRIMing последний '|', так как это указывает на конец строки, поэтому я не получаю пустой элемент в массиве.
Просто интересно, есть ли лучший (более аккуратный / быстрый) способ сделать это?
Я экспериментировал с COPY TO, который лучше обрабатывает окончания строк (и устраняет необходимость во внутреннем unnest / string_to_array), но я ' m пытается избежать создания (другой) «временной таблицы» для получения данных, когда pg_largeobject идеален (oid позволяет мне загружать несколько файлов)