如何通过postgres中的存储函数压缩CSV文件

How to zip CSV files through stored function in postgres

我正在存储函数中使用来自 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。 谢谢!

@a_horse_with_no_name 提醒您应该使用 copy ... PROGRAM 做什么,只需在函数末尾添加代码,在本例中为 tar 格式:

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');
 --add copy commando with PROGRAM
 COPY (SELECT 1) TO PROGRAM 'tar cvf /tmp/mytarfile.tar --remove-files /tmp/*.csv';
RETURN 0;
END;
$$
LANGUAGE 'plpgsql' SECURITY DEFINER