PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

PostgreSql , extraia objetos de esquema DDL para separar o arquivo SQL


Se você estiver na máquina cliente, você pode colocar isso em um script SQL (por exemplo, export_plpgsql.sql):
\pset tuples_only on
\pset footer off
\set QUIET on
\pset format unaligned
\set QUIET off

SELECT '\echo ''* Export '||(CASE proKind WHEN 'f' THEN 'Function' ELSE 'Procedure' END)||' : '||proName||''''
       ||chr(10)||'\copy (SELECT pg_get_functiondef('||p.oid||')) TO '''||:'export_path'||'/'||upper(proName)
       ||(CASE proKind WHEN 'f' THEN '.fct' ELSE '.prc' END)||''' WITH CSV;' as export_routine
FROM pg_proc p
WHERE proNamespace = (SELECT oid FROM pg_namespace WHERE nspName = lower(:'schema_name'))
ORDER BY proName;

e chame-o usando 2 argumentos:schema_name e export_path, por exemplo:
psql -U my_ -d my_db -v schema_name=my_schema -v export_path=C:/temp/export_PG -f export_plpgsql.sql > C:\temp\export_plpgsql.gen.sql

Isso irá gerar um script contendo todos os comandos de exportação para suas rotinas plpgsql, por exemplo.
\copy (SELECT pg_get_functiondef(51296)) TO 'C:/temp/export_PG/my_procedure.prc' WITH CSV;

Último passo:execute o script gerado
psql -U my_ -d my_db -f C:\temp\export_plpgsql.gen.sql

Ele irá gerar um arquivo .prc para cada procedimento e um arquivo .fct para cada função. NB:Você pode ter que refinar o script, pois você pode ter outros tipos de funções (proKind) na visualização pg_proc.