Dam*_*ati 0 mysql postgresql file-io
我该怎么做?
在mysql中,我这样做:
SELECT LOAD_FILE('/path/to/file');
Run Code Online (Sandbox Code Playgroud)
那么postgres呢?不使用\copypsql命令?
这取决于您要确切执行的操作。
您具有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;
Run Code Online (Sandbox Code Playgroud)
仅超级用户可以使用此功能。注意不要打开安全孔。您可以创建具有SECURITY DEFINER,REVOKE FROM公共GRANT TO角色和选定角色的函数。如果安全是一个问题,请在提供的链接中阅读本段:
安全地编写SECUREITY DEFINER函数
pg_read_file()您只能从日志文件目录和数据库目录中读取。在Linux上,您可以创建一个指向数据目录的符号链接(在安全的位置),如下所示:
cd /path//my/database
ln -s /var/lib/postgresql/text_dir/ .
Run Code Online (Sandbox Code Playgroud)
然后像这样调用:
SELECT f_showfile('text_dir/readme.txt');
Run Code Online (Sandbox Code Playgroud)
输出:
f_showfile
-------------------------------------------------------------------------
This is my text from a file.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1624 次 |
| 最近记录: |