Volver al manual de instalación de Regente en Windows

Manual de instalación de Postgres 8.3.11-1

(nota: la idea es realizar la instalación típica tomando actual versión estable de Postgre, se puede descargar de http://www.bircherasociados.com.ar/soft/postgresql-8.3.11-1-windows.exe o del sitio oficial respetando la versión 8.3.11-1 http://www.postgresql.org).

General: instalación de PostgreSQL

  • Después de descargar, ejecutar el instalador postgresql-8.3.11-1-windows.exe. Aparece esta pantalla y hacer click en Next.

  • En esta próxima pantalla nos muestra el directorio donde se instala, dejamos el que propone por defecto.

  • En la próxima pantalla nos pide el directorio donde se instalarán los datos, dejamos el que propone por defecto.

  • En la próxima pantalla nos pide la password que va a tener en usuario que inicia el servicio de postgres y esta misma le asigna al super usuario de la base de datos. Tener en cuenta que si la pc ya tiene el usuario postgres creado, la password debe ser la misma.
    En definitiva: esta es una misma password para dos usuarios que se van a crear: ambos usuarios se llaman "postgres": uno es un usuario de windows (es un usuario sin privilegios que se va a crear y con cuyas credenciales va a correr el servicio postgres) y el otro es un usuario dentro del motor de base de datos (un rol de login): este otro usuario también es postgres y es superusuario dentro del motor de base de datos. Agendarse la clave que se establece acá para ambos usuarios, predeterminadamente cargar como clave el mismo nombre de usuario: "postgres".

  • En la próxima pantalla nos pide el puerto para el postgre, dejar el que propone por defecto, 5432.

  • En esta próxima pantalla nos pide la localización y seleccionamos Spanish,Argentina .

  • En esta próxima pantalla iniciamos la instalación.

  • En esta pantalla muestra que finalizó la instalación. Destildamos el check de stack builder y hacemos click en finish.

  • Editar el archivo: "C:\Archivos de programa\PostgreSQL\8.3\data>notepad pg_hba.conf" y agregar la siguiente linea:
    (para que la base de datos pueda ser accedida directamente desde el pgAdmin de un administrador ubicado en otro equipo -esto es para tareas de administración exclusivamente-)
    Luego de este cambio reiniciar el servicio para que PostgreSQL tome este cambio de seguridad.
    host    all         all         192.168.0.0/16          md5
    
  • Cuando finalizo la instalación, desde el menú inicio ejecutamos el pgAmin III, nos va a salir una pantalla como la de abajo y hacemos doble click sobre el servidor que tenemos creado. Esto nos pide la password que ingresamos arriba.

  • Cambio de idioma de la interfaz: Para que pgadmin esté en español, Ir al menú File - Options y en la solapa general cambiar el idioma a "es_ES Spanish". (Los cambios se harán efectivos luego de salir y volver a entrar a PGAdmin III).

Específico: instalación de la base de datos de Regente

  • Crear roles de login adicionales: inicialmente el motor de base de datos se ha instalado con un rol de login (en adelante "usuario") llamado "postgres".
    Regente en su configuración predeterminada utiliza dos usuarios de la base de datos: "sistemas" (con clave sistemas) y "replicacion" (con clave replicacion) (el primero como superusuario, el segundo como un usuario común).
    Por ejemplo para el usuario "sistemas", hacer clic con el botón derecho del mouse en "roles de login" y elegir del menú contextual "nuevo rol de login". Completar la pantalla como en la figura y OK.

    De manera similar con el usuario replicacion (sólo que notar que hay menos cosas tildadas porque es un usuario común):

  • Restaurar una base de datos inicial de Regente. Hacer el backup en un momento que no se esté utilizando el sistema en la sucursal donde se esta tomando el backup. Normalemte se toma el backup de la última sucursal instalada para que tenga la menor cantidad de instruccione de replicacion.Al recibir una copia en backup de la base de datos de regente, esta es la manera de instalarla:
    • Utilizando el pgAdminIII, conectarse a la base de datos local, clic con el botón derecho en "Bases de Datos" y elegir "Nueva Base de Datos".

    • Crear la base de datos con los siguientes valores: nombre "regente" (puede ser cualquier nombre, pero la versión predeterminada trae configurado ese nombre para acceder), propietario "sistemas", codificado "SQL_ASCII", plantilla "template0".

    • Restaurar una base de datos inicial de regente. Se debe disponer de archivo de backup de base de datos. La restauración se realiza en dos pasos, ambos pasos utilizando el mismo archivo de backup. En el primer paso se restaura la estructura y en el segundo se restauran los datos propiamente.

    • Restaurar base de datos Paso 1 de 2: estructura. Clic con botón derecho en la base de datos "regente" y elegir restaurar. En "Nombre del archivo" buscar el archivo de backup, por ejemplo "c:\soft\regente.backup". Tildar además las opciones "Sólo estructura" y "Sin propietario". Finalmente "OK". Si la estructura fue restaurada correctamente, se va a mostrar una leyenda informando que "El proceso retornó el código de salida 0".

    • Restaurar base de datos paso 2 de 2: datos. Clic con botón derecho en la base de datos "regente" y elegir restaurar. En "Nombre del archivo" buscar el archivo de backup, por ejemplo "c:\soft\regente.backup". Tildar las opciones "Sólo datos", "Sin propietario" y "Deshabilita Disparador". Finalmente "OK". Si los datos fueron restaurados correctamente, se va a mostrar una leyenda informando que "El proceso retornó el código de salida 0".

    • ALTER DATABASE nombre_basedatos SET statement_timeout=480000;
    • ALTER DATABASE nombre_basedatos SET enable_seqscan='off';
    • Comandos (en ventana cmd.exe) para restaurar una BD.
      • Solo estructura,sin propietario y mensajes :

      C:\Archivos de programa\pgAdmin III\1.10\pg_restore.exe --host 192.168.1.95 --port 5432 --username sistemas --dbname regente --no-owner --schema-only --verbose "C:\Documents and Settings\german\Mis documentos\Regente docs\DIRA\backup_dira.bkp.backup"

      • Sólo datos,sin propietario y deshabilitar disparador:

      C:\Archivos de programa\pgAdmin III\1.10\pg_restore.exe --host 192.168.1.95 --port 5432 --username sistemas --dbname regente --data-only --disable-triggers --verbose "C:\Documents and Settings\german\Mis documentos\Regente docs\DIRA\backup_dira.bkp.backup"

  • Si el backup origen de datos tiene muchas instrucciones de replicación (de la tabla replicacion.rep_instrucciones) es posible que demore mucho la restauración de los datos y es posible también que dé errores, etc.
    Relacionado a lo anterior, para restaurar una base de datos, digamos para una sucursal nueva, no son necesarios los registros de replicacion.rep_instrucciones excepto por el último del idu_db de casa central.
    Se presentas a continuación los pasos para restaurar la base de datos tal como se explicó en los pasos anteriores pero teniendo en cuenta además que no se va a restaurar el contenido de replicacion.rep_instrucciones.
    Este procedimiento está agendado en el marco de la instalación de Postgres en Windows pero aplica también a la instalación de Postgres en Linux:
    Solución para restaurar un backup con muchas instrucciones en replicación:
    (caso ejemplo con archivo de backup regente1.dmp y base de datos llamada demo2)
    • 1) Restaurar solo el esquema /usr/lib/postgresql/8.3/bin/pg_restore -h localhost -p 5432 -U sistemas -d demo2 -O -s -v regente1.dmp 2> errores.txt
    • 2) Borrar el schema replicación DROP SCHEMA replicacion CASCADE;
    • 3) Quitar checks que pueden causar problemas con datos viejos: (esto no es específico del problema en cuestión acá que es evitar los datos de replicación en la restauración)
      --(tb. habria que quitar los checks: chk_existencia_especificar_lote en remitos_detalles y chk_numero_en_chequera en tabla valores).
      ALTER TABLE remitos_detalles DROP CONSTRAINT chk_existencia_especificar_lote;
      ALTER TABLE remitos_detalles DROP CONSTRAINT chk_existencia_especificar_lote_unitario;
      ALTER TABLE remitos_detalles DROP CONSTRAINT chk_lote_articulo_correcto;
      ALTER TABLE valores DROP CONSTRAINT chk_numero_en_chequera;
      
      
    • 4) Restaurar solo los datos
      /usr/lib/postgresql/8.3/bin/pg_restore -h localhost -p 5432 -U sistemas -d demo2 -a --disable-triggers -v regente1.dmp 2> errores.txt
      ALTER DATABASE nombre_basedatos SET statement_timeout=480000;
      
    • 5) Volver a poner checks quitados:
      --Volver a poner checks quitados, quiza ajustando algo en los datos:
      delete from remitos_detalles where id_lote IS NULL AND existencia_con_lote(id_articulo)
      ALTER TABLE remitos_detalles ADD CONSTRAINT chk_existencia_especificar_lote CHECK (NOT (id_lote IS NULL AND existencia_con_lote(id_articulo)));
      ALTER TABLE remitos_detalles ADD CONSTRAINT chk_existencia_especificar_lote_unitario CHECK (NOT (COALESCE(cant, 0::double precision) <> 1::double precision AND existencia_con_lote_unitario(id_articulo)));
      ALTER TABLE remitos_detalles ADD CONSTRAINT chk_lote_articulo_correcto CHECK (id_lote IS NULL OR lote_articulo_correcto(id_lote, id_articulo));
      delete from valores where not valor_cheque_en_chequera(id_cuenta, nro, id_tipo_pago)
      ALTER TABLE valores ADD CONSTRAINT chk_numero_en_chequera CHECK (valor_cheque_en_chequera(id_cuenta, nro, id_tipo_pago));
      
    • 6) Hacer un backup de todo el schema replicacion de la base de datos de origen y restaurarla. Restaurar el contenido de tabla replicacion.tolerancia_fallo_firmas de manera manual también.

/usr/lib/postgresql/8.3/bin/pg_dump --host localhost --port 5432 --username "sistemas" --verbose --file "/usr/src/soft/maitessReplicacion.backup" --schema "replicacion" "regente" 2> erroresReplicacion.txt

  • 7) Obtener el ultimo idu_rep_instruccion del server central (se asume idu_db = 1) e insertarlo para que comience a replicar a partir de ahí:
    • 7.1) Extraer las instrucciones de replicacion del archivo de backup: pg_restore -a -t rep_instrucciones regente1.dmp > /home/sistemas/backup/rep_instrucciones.txt
    • 7.2) Quedarse sólo con las instrucciones del día en que se hizo el backup y ordenarlas:
      cat /home/sistemas/backup/rep_instrucciones.txt | grep "2011-10-25 " > rep_instrucciones_20111025.txt
      sort rep_instrucciones_20111025.txt > rep_instrucciones_20111025_sorted.txt
      
    • 7.3) tomar la ultima instruccion que comience en 1 e insertar esa idu_rep_instruccion en replicacion.rep_instrucciones del nuevo server:
      mc -e rep_instrucciones_20111025_sorted.txt
      En este ejemplo:
      1: 4613012
      insert into replicacion.rep_instrucciones values (1,4613012,'restaurado hasta aca','2011-10-27',null,'sql');
      

Nota para nueva versión de Postgres 9.x (por ejemplo 9.1) al instalar Regente

Por cuestiones de compatibilidad cambiar en postgresql.conf o ejecutar:

  • standard_conforming_strings = off
  • escape_string_warning = off
  • (para ejecutar en "caliente" y eventualmente replicar y sin tener que reiniciar nada: por ejemplo en una base de datos que se llama regente "alter database regente set standard_conforming_strings to off;)



Volver al manual de instalación de Regente en Windows

Attachments