Eu fiz isso há algum tempo, basta chamar select * from limpa_tabelas() e na
função limpa_tabela() mudar o nome do schema que você quer, mesmo que dê
erro de integridade, ele continua a apagar, até apagar tudo:

CREATE OR REPLACE FUNCTION "migracao"."limpa_tabela" () RETURNS boolean AS
$body$
/* New function body */
declare
  rmsg record;
  retorno boolean;
begin
     retorno := true;
     for rmsg in (select distinct pg_tables.tablename as tabela from
         pg_tables
         ,pg_class
        ,pg_namespace
        where
             pg_namespace.nspname = 'public'
             and pg_tables.schemaname = pg_namespace.nspname
             and pg_class.relname = pg_tables.tablename
             and pg_class.relnamespace = pg_namespace.oid
        ) loop
          BEGIN
               EXECUTE('delete from '||rmsg.tabela);
          EXCEPTION
                   when integrity_constraint_violation then
                        retorno := false;

          end;
     end loop;
    return retorno;

end;
$body$
LANGUAGE 'plpgsql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;

CREATE OR REPLACE FUNCTION "migracao"."limpa_tabelas" () RETURNS boolean AS
$body$
/* New function body */
begin
     while (migracao.limpa_tabela() = false) loop
           raise notice 'falhou';
     end loop;
     return true;
end;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

2009/8/31 "André Ormenese ( Yahoo )" <ormen...@yahoo.com.br>

> Boa tarde pessoal !!
>
> Estou migrando os dados de um banco numa máquina X, para um outro banco
> numa máquina Y.
>
> Os bancos teem os nomes diferentes, e o relacionamento das tabelas na
> máquina Y também é diferente do relacionamento da máquina X. Por isso só
> posso fazer um dump -a.
>
> Como já existem dados de teste, preciso apagar tudo.
>
> Existe alguma forma automática de criar um script que apague todos os
> dados ( e somente os dados ) de todas as tabelas de um schema, seguindo
> uma ordem que não cause problemas de integridade referencial, ou eu
> preciso fazer isso tabela-a-tabela ???
>
>
>
>
> Obrigado
> André
> _______________________________________________
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>



-- 
André Luiz Martins Pignata
Integral Convênios Odontológicos
Gerente de TI
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a