Моя проблема в том, что я не могу запустить инструкцию COPY внутри хранимой процедуры, и я не знаю почему.Операция COPY внутри хранимой процедуры
Моя функция:
CREATE OR REPLACE FUNCTION copy_table(mynumber integer)
RETURNS void AS
$BODY$
DECLARE
iNumber integer := 0;
BEGIN
iNumber := mynumber;
RAISE NOTICE 'my number: %', iNumber;
IF(iNumber <> 0) THEN
COPY (SELECT * FROM mytable WHERE number = iNumber) TO '/tmp/test.csv' WITH CSV;
END IF;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION copy_table(integer)
OWNER TO "owner";
Теперь, если я сейчас:
COPY (SELECT * FROM mytable WHERE number = 2) TO '/tmp/test.csv' WITH CSV
Я просто получить желаемый результат, но если я использую функцию, описанную ранее, как:
SELECT copy_table(2)
Я получаю сообщение об ошибке:
NOTICE: my number: 2
ERROR: there is no parameter $1
LINE 1: COPY (SELECT * FROM mytable WHERE number = $1) TO '/t...
^
QUERY: COPY (SELECT * FROM mytable WHERE number = $1) TO '/tmp/test.csv' WITH CSV
CONTEXT: PL/pgSQL function "copy_table" line 10 at SQL statement
********** Error **********
ERROR: there is no parameter $1
SQL state: 42P02
Context: PL/pgSQL function "copy_table" line 10 at SQL statement
Любая помощь будет очень признательна, спасибо!
глядя на http://www.postgresql.org/message-id/[email protected], кажется, что это ошибка. Это предполагает использование динамического sql в качестве обходного пути. – Laurence