Já procurei na documentação do PostgreSQL e Google, mas não encontrei a função pg_get_tabledef
, while pg_get_indexdef
exist.
Não há pg_get_tabledef
? Talvez seja muito difícil de ser implementado? mas o pgAdmin4 pode fornecer scripts DDL muito bonitos/claros/limpos para todos os objetos em um banco de dados. Como isso acontece?
Na verdade, preciso comparar as definições de várias tabelas de dois bancos de dados ( como comparar rapidamente as definições de várias tabelas de dois bancos de dados PostgreSQL? ).
Embora existam pg_dump --section=pre-data
e pg_dump --section=post-data
possam despejar todas as definições, mas comparar os resultados ainda seria um trabalho enorme. Eu preciso descobrir exatamente qual estrutura de tabelas foi alterada.
Então, estou esperando pg_get_tabledef
, como pg_get_indexdef
, mas para tabelas. É estranho que não exista tal função, enquanto pg_get_indexdef
existe.
Você poderia me dar alguma dica? obrigado!
A resposta é que não existe porque ninguém o implementou.
As pessoas demonstraram interesse em tal recurso, consulte o tópico na lista de hackers do pgsql .
A primeira dificuldade é especificar o que o resultado deve incluir...
Existe um muito bom por aí agora, escrito por mim:
https://github.com/MichaelDBA/pg_get_tabledef
Não posso responder sua pergunta sobre a existência/inexistência de uma função pg_get_tabledef, no entanto...
Você já olhou para usar a extensão DDLx ( https://pgxn.org/dist/ddlx/ )?
No Linux, eu uso o seguinte para comparar instâncias dev, test e prod de bancos de dados Pg ( script atualizado EDIT 2023-07-13):