PostgreSQL: загрузить файл из файловой системы без вставки в таблицу - PullRequest
0 голосов
/ 03 октября 2011

Как мне сделать такую ​​вещь?
В MySQL я делаю:

SELECT LOAD_FILE('/path/to/file');

А как насчет postgres?Без использования команды \copy psql?

1 Ответ

5 голосов
/ 03 октября 2011

Это зависит от того, что именно вы хотите сделать.

  • У вас есть COPY для чтения структурированных данных во (временные) таблицы.
    Обратите внимание, что это команда SQL, которая похожа, но не совпадает с командой \ copy в psql!

  • И есть pg_read_file () для чтения в любом текстовом файле.

Правка - простой пример:

CREATE FUNCTION f_showfile(myfile text)
  RETURNS text AS
$x$
BEGIN

RETURN pg_read_file(myfile, 0, 1000000); -- 1 MB max.
-- or you could read into a text var and do stuff with it.

END;
$x$
  LANGUAGE plpgsql VOLATILE;

Только суперпользователи могут использовать эту функцию. Будьте осторожны, чтобы не открыть дыры в безопасности. Вы можете создать функцию с SECURITY DEFINER, REVOKE FROM публичными и GRANT TO выбранными ролями. Если проблема в безопасности , прочитайте этот пункт по предоставленной ссылке:

Написание функций БЕЗОПАСНОСТИ Безопасно

pg_read_file() вы можете читать только из директории лог-файла и директории базы данных. В Linux вы можете создать символическую ссылку на каталог данных (в безопасном месте), например:

cd /path//my/database
ln -s /var/lib/postgresql/text_dir/ .

Тогда звоните так:

SELECT f_showfile('text_dir/readme.txt');

Выход:

                                            f_showfile
-------------------------------------------------------------------------
 This is my text from a file.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...