sql >> Database >  >> RDS >> PostgreSQL

PostgreSql, extraheer schema-objecten DDL om het SQL-bestand te scheiden

Als u zich op de clientcomputer bevindt, kunt u dit in een SQL-script zetten (bijv. 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;

en roep het aan met behulp van 2 argumenten:schema_name en export_path, bijvoorbeeld:

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

Dit genereert een script dat alle exports-opdrachten voor uw plpgsql-routines bevat, bijvoorbeeld

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

Laatste stap:voer het gegenereerde script uit

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

Het genereert een .prc-bestand voor elke procedure en een .fct-bestand voor elke functie. NB:Mogelijk moet u het script verfijnen omdat u andere soorten functies (proKind) kunt hebben in de weergave pg_proc.




  1. Hoe het SQL-queryresultaat naar PANDAS-gegevensstructuur te converteren?

  2. Mysql Selecteer tweede rij

  3. Hoe kan ik een lijst maken van alle bestaande tabellen in een Database Link (Oracle)?

  4. RANK, DENSE_RANK en ROW_NUMBER functies in Oracle