Я импортирую данные из файла в таблицу базы данных PostgreSQL, используя COPY FROM
. Некоторые из строк в моем файле содержат шестнадцатеричные символы (в основном \ x0d и \ x0a), и я бы хотел, чтобы они были преобразованы в обычный текст с использованием COPY
.
Моя проблема заключается в том, что они обрабатываются как обычный текст и остаются в строке неизменной.
Как можно преобразовать шестнадцатеричные значения?Как преобразовать шестнадцатеричные символы при использовании Postgres COPY FROM?
Вот упрощенный пример моей ситуации:
-- The table I am importing to
CREATE TABLE my_pg_table (
id serial NOT NULL,
value text
);
COPY my_pg_table(id, data)
FROM 'location/data.file'
WITH CSV
DELIMITER ' ' -- this is actually a tab
QUOTE ''''
ENCODING 'UTF-8'
Пример файла:
1 'some data'
2 'some more data \x0d'
3 'even more data \x0d\x0a'
Примечание: файл с разделителями табуляции.
Теперь, выполнив:
SELECT * FROM my_pg_table
бы получить меня результаты, содержащие шестигранные.
Дополнительная информация для связи:
Моя задача состоит в том, чтобы экспортировать данные из таблиц SyBase (многие сотни) и импорта в Postgres. Я использую UNLOAD
экспортировать данные в файлы следующим образом:
UNLOAD
TABLE my_sybase_table
TO 'location/data.file'
DELIMITED BY ' ' -- this is actually a tab
BYTE ORDER MARK OFF
ENCODING 'UTF-8'
Ответ на вопрос в вашем последнем абзаце: https://www.postgresql.org/docs/current/static/sql-copy.html раздел Форматы файлов: «обратная косая черта не является специальным символом в формате CSV» – azalea