我该怎么做? 在mysql中我做:
SELECT LOAD_FILE('/path/to/file');
postgres怎么样?不使用psql的\copy
命令?
答案 0 :(得分:5)
这取决于你想要做什么。
您有COPY将结构化数据读入(临时)表格 请注意,这是SQL命令,它与psql的\ copy命令类似,但不一样!
并且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.