PostgreSQL:从文件系统加载文件而不插入表

时间:2011-10-03 15:38:52

标签: mysql postgresql file-io

我该怎么做? 在mysql中我做:

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

postgres怎么样?不使用psql的\copy命令?

1 个答案:

答案 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 DEFINERREVOKE 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.