#postgresql #csv
#postgresql #csv
Вопрос:
У меня есть база данных Postgres, которую я заполняю CSV-файлами, используя COPY
. В некоторых таблицах есть столбцы типа bytea
, и в этих CSV-файлах указан путь к двоичному файлу. Учитывая таблицу
CREATE TABLE mytable
( ID INTEGER,
File BYTEA
);
Я знаю, что могу вставлять двоичные файлы с
INSERT INTO mytable VALUES (1, pg_read_binary_file('/path/to/file'));
но могу ли я указать, чтобы это делалось при COPY
чтении /path/to/file
из CSV-файлов? Можете ли вы применить функции к COPY
в Postgres? Я знаю, что в MySQL вы можете сделать это, используя что-то вроде
LOAD DATA
INFILE /path/to/csv
INTO TABLE mytable
( ID,
@File
)
SET File = LOAD_FILE(@File);
но я должен придерживаться Postgres и хранить двоичные файлы в базе данных.
Комментарии:
1. Вам нужно выбрать язык программирования и написать программу, заменяющую эти пути содержимым файлов в шестнадцатеричном формате.
Ответ №1:
Импортируйте ваш CSV-файл во временную таблицу без обработки имен файлов.
Затем создайте отдельную вставку, которая вызывает pg_read_binary_file
.