我在 MacOSX 上运行 Postgres 9.3。我正在尝试在函数中添加一个 COPY 语句,以实现自动保存到文件的过程。
我对任何类型的 sql 编码都不熟悉,所以这就是我目前所拥有的;
CREATE FUNCTION retrieve_info(input_method TEXT, input_species TEXT) RETURNS SETOF
retrieve_info_tbl AS $$
SELECT tblA.id, tblA.method, tblA.species, tblA.location
FROM tblA
WHERE method=input_method AND species=input_species
GROUP BY id, method, species
ORDER BY location
COPY (SELECT * FROM retrieve_info_tbl) TO 'myfilepath/filename.csv' WITH CSV;
$$ LANGUAGE 'sql';
该函数的作用和工作原理是从具有多个物种、方法的更大表中查询方法和in this example tblA
物种,并将其与其位置数据一起检索。不起作用的是COPY
声明。所以,我想添加的是在执行函数时将输出保存到 .csv 文件的语句。此外,是否可以根据 input_method 和 input_species 添加动态 filename.csv?
虚拟数据
tblA(填充)
create table tblA (id varchar(5) PRIMARY KEY, method text, species varchar(10), location
text);
insert into tblA values ('1a', 'mtd1', 'sp1', 'locA'),('1b', 'mtd1', 'sp2', 'locC'),('1c',
'mtd2', 'sp3', 'locB'),('1d', 'mtd1', 'sp1', 'locB'),('1e', 'mtd2', 'sp5', 'locA');
检索信息表(空)
create table retrieve_info_tbl (id varchar(5) PRIMARY KEY, method text, ind varchar(10),
location text);
输出 (当函数中未添加 COPY 语句时)
retrieve_info(mtd1, sp3)
id | method | ind | location
----------------------------
1a | mtd1 | sp3 | locA
1d | mtd1 | sp3 | locB
...并希望将其保存到 '/myfilepath/mtd1_sp3.csv(动态文件名)
非常感谢,
更新:我会对 sql 函数中的保存语句感到满意