Las herramientas pg_dump y pg_dumpall nos ayudan tanto como para respaldar las tablas, como para copiarlas de un sistema a otro en un formato transportable. En algunos casos al actualizar la versión de PostgreSQL será necesario primero respaldarlas con estas herramientas y para posteriormente volverlas a cargar.
pg_dump
se emplea para respaldar una base de datos o una tabla
en particular, mientras que pg_dumpall
respalda todas las bases
de datos en el sistema.
La forma más general de emplear pg_dump
para respaldar sólo una
tabla, es la siguiente:
pg\_dump -t mitabla mibase > mibase.mitabla.dump
con lo cual en el archivo mibase.mitabla.dump tenemos un archivo con los datos y el esquema de la tabla para poder recuperar toda la información en caso de falla del medio físico13.2 o llevarlo a otro sistema.
Por ejemplo:
mancha@caserola:/Extras/Mancha/Musica$ pg_dump -t genero pruebas \connect - mancha CREATE TABLE "genero" ( "genid" int4 DEFAULT nextval('"genero_genid_seq"') NOT NULL, "genero" character varying(32)); REVOKE ALL on "genero" from PUBLIC; GRANT SELECT on "genero" to "nobody"; COPY "genero" FROM stdin; 1 Blues 2 Jazz 3 Reggae 4 Rock 5 Country 6 Folk 7 Newage 8 Soundtrack 9 Misc 10 Data 11 Sin Clasificar 12 Bazofia \. CREATE UNIQUE INDEX "genero_genid_key" on "genero" using btree ( "genid" "int4_ops" ); mancha@caserola:/Extras/Mancha/Musica$
Produce la salida anterior, donde vemos que lo primero que hace es fijar (o tratar de fijar) al usuario creador de la tabla, luego crea la tabla --que en caso de existir no da problemas--, incluyendo el serie asociado a uno de los campos, fija los permisos existentes, y a continuación copia los datos y finalmente crea el índice que la tabla tenía asociado.
Por supuesto, es mejor comprimir los archivos para ocupar el mínimo espacio posible. Por ejemplo, podemos hacerlo así:
pg_dump -t mitabla mibase | gzip -9c > mibase.mitabla.dump.gz pg_dump -t mitabla mibase | bzip2 -c > mibase.mitabla.dump.bz
Ambos programas tienen una serie grande de opciones y se recomienda revisarlas con detenimiento. Ambas pueden ser consultadas con el sistema man.
Para recuperar la información en la base de datos --o a otra base, como mencionábamos-- podemos emplear la siguiente instrucción en la línea de comandos:
gunzip -c mibase.mitabla.dump.gz | psql -e labase bunzip2 -c mibase.mitabla.dump.bz | psql -e labase
y como vimos en el ejemplo, psql tiene toda la información requerida para restaurar la tabla o base completa.