Я использую Postgres 9.3 на MacOSX. Я пытаюсь добавить инструкцию 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 при выполнении функции. Кроме того, возможно ли добавить динамическое имя файла .csv в зависимости, например, от input_method и input_species?
ПРОЕКТНЫЕ ДАННЫЕ
таблица (заполнена)
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');
retrieve_info_tbl (пусто)
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