Re: Añadir campos, tablas y triggers a una base de datos en funcionamiento

From: Calabaza <calalinux(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Añadir campos, tablas y triggers a una base de datos en funcionamiento
Date: 2008-06-27 11:16:26
Message-ID: 958993320806270416k4265a849pe565e57a899b4429@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El día 27 de junio de 2008 2:32, PRiNCiPiTo <el-PRiNCiPiTo(at)terra(dot)es> escribió:
> Hola, tengo una base de datos funcionando (con datos validos y en uso
> constante) y querría añadir algunas tablas nuevas, algunos campos a
> tablas ya existentes y varios triggers con sus funciones.

> Ningún campo de los nuevos es obligatorio así que si lo creo "a mano"
> no hay problema pero el caso es que la estructura de la base de datos
> nueva la tengo en otro ordenador sin datos y me preguntaba si hay alguna
> forma de volcar esta nueva estructura en la vieja para no tener que ir
> añadiendo cada campo y tabla a mano.

> Si se puede me interesa saber si mientras lo hago tengo que parar el
> sistema que introduce datos o si se puede seguir usando sin perder la
> información de ese momento.

Te cuento mi experiencia a ver si te sirve, es casi "a mano" :(

Para agregar los objetos nuevos: tablas, funciones, trigguers

1) Hice un dump de la BD en producción.

2) Lo restaure en otra BD para probar a hacer los cambios

3) Hice un dump de la BD Actualizada

3.1) Extraje la TOC (Tabla de Contenido) del archivo .backup de la
BDActualizada en un archivo de texto
mira la ayuda del pg_restore:
http://www.postgresql.org/docs/8.3/interactive/app-pgrestore.html
creo que el modificador -l te servira para esto.

4) Borre todas las lineas que eran los datos ya existente, o sea: deje
solamente las nuevas tablas o trigguers o funciones.

5) Luego le aplique el restore sobre la BD de prueba diciendole que
utilice el archivo anterior como indice: creo que es el modificador
-L para tu pg_restore.

Luego tuve otro problema, para actualizar las tablas existentes:
Agregar nuevos campos o modificar existentes:
1) Hice un dump de la BD en producción pero en un archivo sql
http://www.postgresql.org/docs/8.3/interactive/app-pgdump.html

2) Modifique los create table de las tablas modificadas para que sean
un update tables
3) Aplique el "parche" a la BD en Prueba

Lo que debes de tener cuidado es que:
Se actualicen los objetos en orden de prioridad, esto es
1° crea las tablas,
2° las funciones,
3° has los updates a las tablas existentes y por ultimo
4° agrega los triggers.

Tips:
* Hay comandos para deshabilitar el chequeo de triggers, esto es util
si ya tienes triggers activos en tu bd de produccion.
* Debes tratar de tardar lo menos posible en actualizar los datos, y
sugeriría que lo hagas por la noche a fin de tener la menor cantidad
de transacciones.

Espero que te sirva... un abrazo..
--
§~^Calabaza^~§ from Villa Elisa, Paraguay
----------------
A hendu hína: The Beatles - Birthday
http://foxytunes.com/artist/the+beatles/track/birthday

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2008-06-27 12:29:02 Re: RAISE NOTICE en 8.3.3
Previous Message Calabaza 2008-06-27 10:26:26 Re: Interconectar POSTGRE INTERBASE/FIREBIRD