[wiki:manual_regente_windows Volver al manual de instalación de Regente en Windows] [[BR]] == 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). [[BR]] === 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. {{{ #!div style="border: 0pt solid; text-align: center" [[Image(postgres-1.JPG)]] }}} * En esta próxima pantalla nos muestra el directorio donde se instala, dejamos el que propone por defecto. {{{ #!div style="border: 0pt solid; text-align: center" [[Image(postgres-2.JPG)]] }}} * En la próxima pantalla nos pide el directorio donde se instalarán los datos, dejamos el que propone por defecto. {{{ #!div style="border: 0pt solid; text-align: center" [[Image(postgres-3.JPG)]] }}} * 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. [[BR]] 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". {{{ #!div style="border: 0pt solid; text-align: center" [[Image(postgres-4.JPG)]] }}} * En la próxima pantalla nos pide el puerto para el postgre, dejar el que propone por defecto, 5432. {{{ #!div style="border: 0pt solid; text-align: center" [[Image(postgres-5.JPG)]] }}} * En esta próxima pantalla nos pide la localización y seleccionamos Spanish,Argentina . {{{ #!div style="border: 0pt solid; text-align: center" [[Image(postgres-6.JPG)]] }}} * En esta próxima pantalla iniciamos la instalación. {{{ #!div style="border: 0pt solid; text-align: center" [[Image(postgres-7.JPG)]] }}} * En esta pantalla muestra que finalizó la instalación. Destildamos el check de stack builder y hacemos click en finish. {{{ #!div style="border: 0pt solid; text-align: center" [[Image(postgres-8.JPG)]] }}} * Editar el archivo: "C:\Archivos de programa\PostgreSQL\8.3\data>notepad pg_hba.conf" y agregar la siguiente linea:[[BR]](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-)[[BR]]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. {{{ #!div style="border: 0pt solid; text-align: center" [[Image(postgres-9.JPG)]] }}} * 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). {{{ #!div style="border: 0pt solid; text-align: center" [[Image(pgsql01.jpg)]] }}} === 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".[[BR]]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).[[BR]]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. {{{ #!div style="border: 0pt solid; text-align: center" [[Image(pgsql02.jpg)]] }}} De manera similar con el usuario replicacion (sólo que notar que hay menos cosas tildadas porque es un usuario común): {{{ #!div style="border: 0pt solid; text-align: center" [[Image(pgsql03.jpg)]] }}} * 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". {{{ #!div style="border: 0pt solid; text-align: center" [[Image(pgsql04.jpg)]] }}} * 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". {{{ #!div style="border: 0pt solid; text-align: center" [[Image(pgsql05.jpg)]] }}} * 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. {{{ #!div style="border: 0pt solid; text-align: center" [[Image(pgsql06.jpg)]] }}} * 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". {{{ #!div style="border: 0pt solid; text-align: center" [[Image(pgsql07.jpg)]][[Image(pgsql08.jpg)]] }}} * 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". {{{ #!div style="border: 0pt solid; text-align: center" [[Image(pgsql09.jpg)]][[Image(pgsql10.jpg)]] }}} * 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. {{{ #!div style="border: 0pt solid; text-align: left" * 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.[[BR]]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'''.[[BR]]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.[[BR]]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:[[BR]]'''Solución para restaurar un backup con muchas instrucciones en replicación:'''[[BR]](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;) [[BR]] [[BR]] [wiki:manual_regente_windows Volver al manual de instalación de Regente en Windows]