【发布时间】:2019-08-23 09:46:23
【问题描述】:
我正在一个存储函数中使用来自 postgres 的 COPY 语句生成一些 CSV 文件。
CREATE OR REPLACE FUNCTION "public"."create_csv" () RETURNS INT AS
$$
BEGIN
EXECUTE format('COPY (SELECT * FROM test) TO %L DELIMITER '','' CSV HEADER', '/tmp/test.csv');
EXECUTE format('COPY (SELECT * FROM test2) TO %L DELIMITER '','' CSV HEADER', '/tmp/test2.csv');
RETURN 0;
END;
$$
LANGUAGE 'plpgsql' SECURITY DEFINER
这个函数是从父函数调用的,执行完之后我想将生成的 CSV 文件压缩成一个 zip 文件,我如何使用数据库中存储的函数来完成这个?有没有办法使用 plpgsql 做到这一点?还是我应该使用 plpythonu 语言? Postgres 9.6 版。 谢谢!
【问题讨论】:
-
您可以将复制命令的输出发送到服务器上的程序。像
copy .. to program 'gzip ...'这样的东西。手册中有一个例子postgresql.org/docs/current/sql-copy.html#id-1.9.3.55.10 -
您好,感谢您的回答,但不幸的是,该选项无法解决我的问题。我想要做的是,使用几个 COPY 语句生成可变数量的 CSV 文件,然后(一旦生成所有 CSV 文件),将它们全部压缩到一个 xx.zip 文件中。可以使用 TO 程序吗?还有其他选择吗?有人可以提供一个例子吗?提前致谢。
标签: postgresql plpgsql zipfile stored-functions