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