我编写了一个将文件复制到特定位置的函数,但是我试图对该函数进行一些调整。下面的函数将表中的 hire_date 数据复制到 datafinal.csv < / strong>文件。
我正在尝试将 max(hire_date)附加到 datafinal.csv 文件名。
例如: datafinal_20190302.csv
CREATE OR REPLACE FUNCTION exportfile_csv()
RETURNS integer as $$
declare rows integer;
BEGIN
copy (select hire_date from mytable)
to program 'cat > /data/backup/file_out/datafinal.csv'
With CSV header;
GET DIAGNOSTICS rows=ROW_COUNT;
return rows;
END;
$$ LANGUAGE plpgsql;
答案 0 :(得分:0)
不幸的是,除了文字之外的其他表达式都不适用于目标路径。但是您可以将命令构建为字符串,然后EXECUTE
来构建,例如:
EXECUTE 'COPY (SELECT hire_date FROM mytable) TO PROGRAM ''cat > /data/backup/file_out/datafinal_' || to_char(now(), 'YYYYMMDD') || '.csv'' WITH CSV HEADER;';
您可能不需要绕行cat
EXECUTE 'COPY (SELECT hire_date FROM mytable) TO ''/data/backup/file_out/datafinal_' || to_char(now(), 'YYYYMMDD') || '.csv'' WITH CSV HEADER;';
应该工作。