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?

Author: vmb, 2012-12-07

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.

 43
Author: Craig Ringer,
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
 21
Author: dezso,
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