Это зависит от того, что именно вы хотите сделать.
У вас есть 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.