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

Responder a