PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

PostgreSql, extrait les objets de schéma DDL pour séparer le fichier SQL

Si vous êtes sur la machine cliente, vous pouvez mettre ceci dans un script SQL (par exemple 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;

et appelez-le avec 2 arguments :schema_name et export_path, par exemple :

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

Cela générera un script contenant toutes les commandes exports pour vos routines plpgsql, par exemple

\copy (SELECT pg_get_functiondef(51296)) TO 'C:/temp/export_PG/my_procedure.prc' WITH CSV;

Dernière étape :exécuter le script généré

psql -U my_ -d my_db -f C:\temp\export_plpgsql.gen.sql

Il générera un fichier .prc pour chaque procédure et un fichier .fct pour chaque fonction. NB :Vous devrez peut-être affiner le script car vous pouvez avoir d'autres types de fonctions (proKind) dans la vue pg_proc.