Tips 7.x

From PostgreSQL wiki

Jump to: navigation, 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.

Personal tools