Cómo tomar copia de seguridad de funciones solo en Postgres
Quiero hacer una copia de seguridad de todas las funciones en mi base de datos postgres.¿Cómo tomar la copia de seguridad de las funciones solamente en Postgres?
2 answers
Use pg_getfunctiondef
; véase 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
; por ejemplo, si lo desea todo desde 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_
" en cambio, si eso es lo que quieres.
En psql
puede 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, usa algo como:
psql -1 -v ON_ERROR_STOP -f /path/to/output/file.sql target_db_name
Si está replicando funciones entre DBs como esta, considere almacenar la copia autorativa de las definiciones de función como un script SQL en un sistema de control de revisiones como svn o git, preferiblemente empaquetado como una extensión PostgreSQL. Véase extensiones de embalaje.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-07 12:37:44
No se le puede decir a pg_dump
que vuelque solo funciones. Sin embargo, puede hacer un volcado sin datos (-s
) y filtrarlo al restaurar. Tenga en cuenta la parte -Fc
: esto producirá un archivo adecuado para pg_restore
.
Primero toma el vertedero:
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 anteriormente):
pg_restore -U username -d your_other_database -L function_list dump_test
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-07 06:53:25