On 15-11-2015 07:21, Flavio Henrique Araque Gurgel wrote:
Sua função está colocando aspas e parênteses no nome da tabela.
Corrija a concatenação no execute.
O problema não é só esse. Ele está usando o tipo record ao invés do
elemento 'relname' do record.
Como o Flavio disse, o ideal é não usar aspas e sim a função quote_ident
que decide se precisa usar aspas duplas ou não.
CREATE OR REPLACE FUNCTION teste() returns setof record as $$
DECLARE
tabela CURSOR IS SELECT relname FROM pg_stat_user_tables ORDER BY relname;
linha record;
BEGIN
OPEN tabela;
FETCH tabela INTO linha;
EXECUTE 'COPY (SELECT row_to_json(t) FROM (SELECT * FROM ' ||
quote_ident(linha.relname) || ') t) TO ''/tmp/teste''';
CLOSE tabela;
END;
$$
LANGUAGE plpgsql
É claro que se você declarou um cursor é porque vai usar um 'FOR foo IN
bar LOOP' ali.
--
Euler Taveira Timbira - http://www.timbira.com.br/
PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral