Tips 7.x

From PostgreSQL wiki
Jump to navigationJump to search

Cambiar Dueño de la Base de Datos en Versiones 7.x

Existen algunas formas para esto. Una de ellas es utilizando una linea de comando como esta:

pg_dump -U<usuarioViejo> <base> | perl -pe 's/- <usuarioViejo>/- <usuarioNuevo>/g' > db.sql

Luego el archivo lo podés restaurar y te recomiendo borrar la base anterior del cluster.


Otra forma, que requiere más espacio (exactamente el tamaño de la base a clonar), es crear una base utilizando de template la anterior:

CREATE DATABASE pepe TEMPLATE=<viejaBase> OWNER=<nuevoDueño>;


Existe otra forma inclusive, en el caso que no contemos con espacio suficiente para los backups o para clonar la base, que consta de varios pasos (con Bash):

sudo -u postgres /usr/bin/createuser -a -d <nuevo_usuario>
sudo psql -Upostgres <base_de_datos> -c "update pg_database set datdba = (
                         select usesysid from pg_shadow where usename = '<nuevo_usuario>') 
                         where datname = '<base_de_datos>' ;"

Exportamos un listado de objetos (para tablas con '\d' es suficiente) de nuestra base de datos a un archivo llamado tablas.dat .Sobre ese archivo ejecutaremos:

for table in `cat tablas.dat`;do sudo psql -Upostgres <base_de_datos> -c "
                                                            alter TABLE $table owner to <nuevo_usuario>;";done

sudo -u postgres /usr/bin/dropuser <viejo_usuario>

Error al leer bloques físicos

Suele suceder, cuando abruptamente se apaga un 'servidor', que al iniciar nos aparezca un error PANIC: Invalid page header in block.


Existe una forma de ignorar los errores de bloque. Para esto debemos setear (con el sercicio postgresql abajo) zero_damaged_pages = on en el postgresql.conf.


Ahora teniendo esta variable seteada iniciamos postgres. Luego de haber iniciado, inmediatamente debemos generar un dump con la herramienta pg_dump.


Luego de haber finalizado esta tarea precedemos a bajar el servicio de postgres y a comentar la linea agregada en el párrafo 2.


Ahora sí podremos iniciar Postgres y restaurar la base desde el dump generado.


NOTA: zero_damaged_pages está incluido en 8.x, pero la detección de la inaccesibilidad de las páginas es automática y se repara automáticamente.