有什么方法可以在触发器函数内访问文本文件上的数据吗?
您可以使用标准 PL/pgSQL 函数。
COPY
COPY
。 手册。
带文件名指示PostgreSQL服务器直接读取 从文件或写入文件。该文件必须可供服务器访问并且 必须从服务器的角度指定名称。COPY
对于更复杂的操作,您可能需要使用临时表作为临时表,将文件放入其中并从那里使用纯 SQL 命令。
类似于这个例子。不过,请确保尝试在同一会话中多次创建同一个表时不会遇到冲突...... 如果该文件是您的客户端的本地文件和/或您的权限受到限制,请考虑使用 psql 中的
COPY
。参见:
\copy
我用它来读取小型 XML 文件并在 PostgreSQL 中进行处理。演示:
pg_read_file()
您可以使用从 db 目录到任何其他目录的符号链接来克服路径限制。警惕可能的安全隐患。
CREATE OR REPLACE FUNCTION f_import_from_file()
RETURNS boolean
LANGUAGE plpgsql AS
$func$
DECLARE
myxml xml;
datafile text := 'path/relative/to/db_cluster/myfile.xml';
BEGIN
myxml := pg_read_file(datafile, 0, 10000000); -- 10 MB max.
-- do stuff, like INSERT ...
$func$
file_fdw
是的,但您需要一种不受信任的语言 pl/sh、pl/perlu、C 等。
您可以使用我的
“PostgreSQL 文件 I/O 函数”免责声明:我是此扩展的作者,我提供该扩展作为问题的解决方案。