sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo hacer una copia de seguridad de las funciones solo en Postgres

usa pg_getfunctiondef; ver funciones de información del sistema. pg_getfunctiondef se agregó en PostgreSQL 8.4.

SELECT pg_get_functiondef('proc_name'::regproc);

Para volcar todas las funciones en un esquema, puede consultar las tablas del sistema en pg_catalog; di si querías todo de public :

SELECT pg_get_functiondef(f.oid)
FROM pg_catalog.pg_proc f
INNER JOIN pg_catalog.pg_namespace n ON (f.pronamespace = n.oid)
WHERE n.nspname = 'public';

es trivial cambiar lo anterior para decir "de todos los esquemas excepto aquellos que comienzan con pg_ " en cambio, si eso es lo que quieres.

En psql puede volcar esto en un archivo con:

psql -At dbname > /path/to/output/file.sql <<"__END__"
... the above SQL ...
__END__

Para ejecutar la salida en otra base de datos, use algo como:

psql -1 -v ON_ERROR_STOP -f /path/to/output/file.sql target_db_name

Sin embargo, si está replicando funciones entre bases de datos como esta, considere almacenar la copia autoritaria de las definiciones de funciones como un script SQL en un sistema de control de revisión como svn o git, preferiblemente empaquetado como una extensión de PostgreSQL. Ver extensiones de empaque.