sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSql , udtræk skemaobjekter DDL for at adskille SQL-fil

Hvis du er på klientmaskinen, kan du indsætte dette i et SQL-script (f.eks. 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;

og kald det ved hjælp af 2 argumenter:skemanavn og eksportsti, for eksempel:

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

Dette vil generere et script, der indeholder alle eksportkommandoer til dine plpgsql-rutiner, f.eks.

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

Sidste trin:kør det genererede script

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

Det vil generere en .prc-fil for hver procedure og en .fct-fil for hver funktion.NB:Du skal muligvis forfine scriptet, da du kan have andre slags funktioner (proKind) i pg_proc-visningen.




  1. Hvordan finder man tidligere post [n-per-group max(timestamp) <timestamp]?

  2. Genbruge en parameter i en PreparedStatement?

  3. ALLE operatører i WHERE-klausulen i Rails

  4. MySQL-tabel med fast antal rækker?