Вставить двоичный файл с копией в Postgres

#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 .