COPY有点奇怪,因为
query即使它不是写为字符串,它也会将其参数视为字符串。结果是
query:
SELECt * FROM retrieve_info($1, $2)
不是在函数的上下文中执行,而是在COPY本身的上下文中执行。即使您说:
copy (select * from t) ...
就像您写的那样:
copy 'select * from t' ...
因此,在执行查询时,函数参数不再具有任何意义,
queryCOPY的参数可能看起来像是其他语言中的闭包,但实际上并没有,它的作用更像是将字符串传递给
eval。
您可以使用最后的手段Kludge:动态SQL来解决这种奇怪的情况。如果您编写函数以使用字符串wrangling和EXECUTE,则应该获得更好的结果:
create or replace function print_out(text, text) returns void as $$begin execute 'copy (' || 'select * from retrieve_info' || '(' || quote_literal($1) || ',' || quote_literal($2) || ')' || ') to ''myfilepath/test.csv'' with csv header;';end;$$ language plpgsql;


