postgresql обновляет поле bytea изображением с рабочего стола

Я пытаюсь написать обновление SQL-оператора в Postgresql (pg Commander), который будет обновлять столбец изображения профиля пользователя

Я пробовал это:

update mytable set avatarImg = pg_read_file('/Users/myUser/profile.png')::bytea where userid=5;

получил ERROR: absolute path not allowed

2 ответа

  1. Прочитайте файл в клиенте.
  2. Избегайте содержимого как bytea.
  3. Вставьте в базу данных как обычно.

(Разработка правильного, но краткого ответа Ричарда; его следует пометить как правильный):

pg_read_file на самом деле предназначен только в качестве административного инструмента и в соответствии с руководством:

Функции, показанные в Таблице 9-72, обеспечивают собственный доступ к файлам на компьютере, на котором размещен сервер. Только файлы в каталоге кластера базы данных и log_directory могут быть доступны.

Даже если это ограничение не применяется, используя pg_read_file было бы неправильно; вам придется использовать pg_read_binary_file, Вы не можете просто читать text и бросить в bytea как это.

Ограничения пути означают, что вы должны прочитать файл, используя клиентское приложение, как говорит Ричард. Прочитайте файл с клиента, установите его как bytea поместите параметр в ваш SQL и отправьте запрос.

Вы также можете использовать lo_import чтобы прочитать файл на стороне сервера в виде большого двоичного объекта, а затем прочитать его как bytea и удалите двоичный большой объект.

pg_read_file может читать файлы только из пути к каталогу данных, если вы хотите знать, как использовать путь к каталогу данных:

SHOW data_directory;

Например, это покажет,

/var/lib/postgresql/data

Скопируйте файл в указанную директорию. После вы можете использовать только имя файла в вашем запросе.

UPDATE student_card SET student_image = pg_read_file('up.jpg')::bytea;

или можете использовать функцию pg_read_binary_file.

UPDATE student_card SET student_image = pg_read_binary_file('up.jpg')::bytea;
Другие вопросы по тегам