sql - procedimientos - Cómo realizar copias de seguridad de funciones solo en Postgres
funciones y procedimientos en postgresql (2)
No puedes decirle a pg_dump
que vuelque solo funciones. Sin embargo, puede hacer un volcado sin datos ( -s
) y filtrarlo en la restauración. Tenga en cuenta la parte -Fc
: esto producirá un archivo adecuado para pg_restore
.
Primero toma el basurero
pg_dump -U username -Fc -s -f dump_test your_database
Luego crea una lista de las funciones:
pg_restore -l dump_test | grep FUNCTION > function_list
Y finalmente restaurarlos ( -L
especifica el archivo de lista creado arriba):
pg_restore -U username -d your_other_database -L function_list dump_test
Quiero realizar una copia de seguridad de todas las funciones en mi base de datos de postgres. ¿Cómo realizar una copia de seguridad de las funciones solo en Postgres?
utilizar pg_getfunctiondef
; Ver funciones de información del sistema . pg_getfunctiondef
fue agregado 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 los que comienzan con pg_
", si eso es lo que quiere.
En psql
puedes volcar esto a un archivo con:
psql -At dbname > /path/to/output/file.sql <<"__END__"
... the above SQL ...
__END__
Para ejecutar la salida en otro DB, 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 autorativa de las definiciones de funciones como un script SQL en un sistema de control de revisiones como svn o git, preferiblemente empaquetado como una extensión PostgreSQL. Ver extensiones de embalaje .