Ola Thiago,

Thiago Risso escreveu:
Seguinte ... Preciso fazer um select de todas as tabelas do meu BD
(pg_class) , onde estas venha na seguinte ordem:

As tabelas que possuam FK , devem vir após sua tabela relacionada ...
(ORDEM para que no INSERT não haja problemas com chaves estrangeiras)...

Ex:
tenho as tabelas:pessoa, pessoa_endereco, endereco_tipo, cidade e estado.

as tabelas deveriam vir na seguinte ordem :

estado  ou endereco tipo (Que não possuem nenhuma FK)
cidade (Que possui a FK do Estado)
pessoa_endereco (Que possui as FK's de endereco_tipo, cidade e estado)
pessoa (Que possui FK de pessoa_endereco)

* Isso é só um exemplo, pois em minha base possuo mais de 200 tabelas,
quase todas elas relacionadas.

Através da pg_trigger eu consigo pegar as tabelas relacionadas com o select :

SELECT T.relname,(SELECT relname FROM pg_class WHERE oid = TG.tgrelid)
FROM pg_trigger TG
INNER JOIN pg_class T ON T.oid = TG.tgconstrrelid AND t.relname = 'pessoa'
INNER JOIN pg_namespace SCH ON SCH.oid = T.relnamespace
AND SCH.nspname = 'public';

Mas estou meio perdido de como montar uma função para ordenar isso...

Teria que ser algo assim :

SELECT * FROM pg_class ORDER BY tablenoconstraint();

ou

SELECT tablenoconstraint();
Tche, ao que me parece vc estah precisando de algo como criar um script de backup no braco, ou algo assim. Se for o caso, ao inves de se preocupar com a sequencia das tabelas por causa das FKs, uma sugestao eh fazer o mesmo que o pg_dump, que gera os dados na seguinte sequencia:
- Cria estrutura das tabelas
- Popula as tabelas
- Recria as PKs
- Recria as FKx
- Recria o resto (indices, triggers, funcoes, etc)

Assim voce nao tem problemas com a sequencia.

Alvaro
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a