sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSql , extrahera schemaobjekt DDL för att separera SQL-fil

Om du är på klientdatorn kan du lägga detta i ett SQL-skript (t.ex. 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;

och kalla det med två argument:schemanamn och exportsökväg, till exempel:

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

Detta kommer att generera ett skript som innehåller alla exportkommandon för dina plpgsql-rutiner, t.ex.

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

Sista steget:kör det genererade skriptet

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

Det kommer att generera en .prc-fil för varje procedur och en .fct-fil för varje funktion. OBS:Du kan behöva förfina skriptet eftersom du kan ha andra typer av funktioner (proKind) i pg_proc-vyn.




  1. Hur får man åtkomst till MySQL från en fjärrdator (inte localhost)?

  2. sun.security.validator.ValidatorUndantag:Byggandet av PKIX-väg misslyckades, med java>1.6

  3. Vilken datatyp ska användas för en beskrivning?

  4. Så här fixar du:JSON_VALUE Returnerar NULL med långa strängar (SQL-server)