PHP Fatal error: Uncaught PDOException al migrar a Mapuche 3.12.0

Buenos días, estoy intentando migrar de Mapuche 3.11.1 a 3.12.0 y como informa la actualización hay que subir a la versión 7.3 de php y a la versión 11 de postgres. El Mapuche está instalado en un Linux 16.04 y he probado con un sevidor de base de datos afuera y en localhost.

  • Actualizar a php7.3
    Creo que algún módulo me falta por que la verdad es que no los encontré para php7.3 (me quería instalar el 7.4 con algunos módulos)
root@mapuche:/siu/SIU-Mapuche_3.12.0# php -m [PHP Modules] apc apcu bcmath calendar Core ctype curl date dba dom exif fileinfo filter ftp gd gettext hash iconv json libxml mbstring openssl pcntl pcre PDO pdo_pgsql pgsql Phar posix readline Reflection session shmop SimpleXML soap sockets sodium SPL standard sysvmsg sysvsem sysvshm tokenizer wddx xml xmlreader xmlwriter xsl Zend OPcache zip zlib

[Zend Modules]
Zend OPcache

  • Actualizar a postgres 11, no tuve mayores problemas, seguí éstas instrucciones
sudo apt-get install curl ca-certificates gnupg curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' sudo apt-get update sudo apt install postgresql-11
Por supuesto el único problema es pasar la base de datos de una versión a la otra.

Configuré el instalador y no logro sacar éste error de php (les copio la última parte del log)

[2020-09-28 10:14:08] MAIN.INFO: [ TOBA ] OK. Debe reiniciar el servidor web para que los cambios tengan efecto TIEMPO: 3,681 segundos [2020-09-28 10:14:08] MAIN.INFO: [ COMANDO EJECUTADO ] php /siu/SIU-Mapuche_3.12.0/vendor/siu-toba/framework/bin/toba proyecto migrar -p mapuche -i produccion -a 1 --base-nombre siu --base-schema mapuche [2020-09-28 10:14:08] MAIN.INFO: [ TOBA ] [2020-09-28 10:14:08] MAIN.INFO: [ TOBA ] [2020-09-28 10:14:08] MAIN.INFO: [ TOBA ] [2020-09-28 10:14:08] MAIN.INFO: [ TOBA ] Actualizando mapuche 3.12.0 [2020-09-28 10:14:08] MAIN.INFO: [ TOBA ] [2020-09-28 10:14:08] MAIN.INFO: [ TOBA ] [2020-09-28 10:14:08] MAIN.INFO: [ TOBA ] [2020-09-28 10:14:08] MAIN.INFO: [ TOBA ] [2020-09-28 10:14:08] MAIN.INFO: [ TOBA ] Cambio: 6074, Nueva Tabla para registrar los cambios de base de datos ejecutados sobre la misma [2020-09-28 10:14:08] MAIN.INFO: [ TOBA ] Conversor - pre_conversion: se va a ejecutar el escenario 3110 -> 3120 [2020-09-28 10:14:09] MAIN.INFO: [ TOBA ] [2020-09-28 10:14:09] MAIN.INFO: [ TOBA ] Cambio: 6301, Nuevo indice en tabla imp_partida_liquidacion [2020-09-28 10:14:09] MAIN.INFO: [ TOBA ] Cambio: 6367, Eliminar restricciones funcionales que hacen referencia a Ayuda -> Mantenete conectado con el SIU -> Google+ [2020-09-28 10:14:09] MAIN.INFO: [ TOBA ] [2020-09-28 10:14:09] MAIN.INFO: [ TOBA ] Cambio: 6370, Nuevos campos en dh41 para Gastos de Movilidad, % al�ota, exentos covid) [2020-09-28 10:14:09] MAIN.INFO: [ TOBA ] Cambio: 6371, Nuevo tipo de grupo de conceptos (88) [2020-09-28 10:14:09] MAIN.INFO: [ TOBA ] Cambio: 6407, Nuevas tablas MUG y su mapeo con Mapuche [2020-09-28 10:14:13] MAIN.INFO: [ TOBA ] Cambio: 6412, Ampliacion del campo de Fax [2020-09-28 10:14:13] MAIN.INFO: [ TOBA ] Cambio: 1221, Se actualizan las funciones de la base de datos [2020-09-28 10:14:14] MAIN.INFO: [ TOBA ] Conversor - post_conversion: se actualizo la version de rrhhini a 3.12 [2020-09-28 10:14:14] MAIN.INFO: [ TOBA ] Cambio: 1602, Incorporaci󮠤el soporte para logs de la base de datos [2020-09-28 10:14:58] MAIN.INFO: [ TOBA ] PHP Fatal error: Uncaught PDOException: SQLSTATE[22021]: Character not in repertoire: 7 ERROR: invalid byte sequence for encoding "UTF8": 0xe1 0x73 0x20 in /siu/SIU-Mapuche_3.12.0/php/extension_toba/db_manager.php:39 Stack trace: #0 /siu/SIU-Mapuche_3.12.0/php/extension_toba/db_manager.php(39): PDO->exec('DROP SCHEMA map...') #1 /siu/SIU-Mapuche_3.12.0/php/modelos/conversion/conversor.php(441): db_manager->ejecutar(Object(PDO), Array) #2 /siu/SIU-Mapuche_3.12.0/php/modelos/conversion/conversor.php(510): conversor->post_conversion() #3 /siu/SIU-Mapuche_3.12.0/php/extension_toba/mapuche_modelo.php(92): conversor->convertir(Object(toba_version)) #4 /siu/SIU-Mapuche_3.12.0/php/extension_toba/mapuche_comando.php(31): mapuche_modelo->migrar(Object(toba_version), Object(toba_version)) #5 /siu/SIU-Mapuche_3.12.0/vendor/siu-toba/framework/php/consola/comandos/comando_proyecto.php(87): mapuche_comando->opcion__migrar(Array) #6 /siu/SIU-Mapuche_3.12.0/vendor/siu-toba/framework/php/consola/comando.php(90): comando_proyecto->ejecutar_opc in /siu/SIU-Mapuche_3.12.0/php/extension_toba/db_manager.php on line 39

Qué se me está pasando ???
Espero haber sido claro

Saludos

Juan Pablo Arango - Universidad Nacional Raúl Scalabrini Ortíz

Hola Juan Pablo, verificaste que el default_charset del php.ini sea ISO-8859-1.

Saludos,
Mariela

2

Mariela, estaba en UTF8, ya lo modifiqué… corrí el proceso de nuevo y dá el mismo error.

Saludos
Juan Pablo

Como tenes la configuración en postgresql.conf de la variable standard_conforming_strings? tiene que estar en off y descomentada. Luego de cada cambio reiniciar el servicios de postgres en este caso y de apache si modificaste la configuración en el php.ini para que te tome los cambios.

Saludos,
Mariela

2

Mariela.

configuración en postgresql.conf de la variable standard_conforming_strings? tiene que estar en off y descomentada
Descomentada y el off (no estaba originalmente) Reinicio cada vez que hago algún cambio. Les paso el instalador.log

instalador.txt (23.2 KB)

Pasame nuevamente el archivo, creo que no es el que corresponde el que adjuntaste.

Saludos,
Mariela

Ahí lo eliminé y lo volví a adjuntar en el mensaje anterior … disculpas

Juan Pablo

Con que encoding fue creada la base?, me podrías adjuntar ahora el log de postgres?
Gracias

Mariela, cuando creo una base de datos para Mapuche hago lo siguiente.
Desde PGAdmin4 creo la base de datos y correo el siguiente comando para convertir la base de datos

update pg_database set encoding=0 where datname='siu';
Luego restauro la base de datos (la que está en el postgres 9.6)
2020-09-28 16:41:48.654 -03 [6044] LOG: el sistema de bases de datos fue apagado en 2020-09-28 16:41:37 -03 2020-09-28 16:41:48.654 -03 [5792] LOG: el sistema de bases de datos está listo para aceptar conexiones 2020-09-28 16:41:48.670 -03 [5168] FATAL: el sistema de base de datos está iniciándose 2020-09-28 16:44:38.152 -03 [2756] LOG: los puntos de control están ocurriendo con demasiada frecuencia (cada 14 segundos) 2020-09-28 16:44:38.152 -03 [2756] HINT: Considere incrementar el parámetro de configuración «max_wal_size». 2020-09-28 16:44:41.443 -03 [5868] ERROR: invalid byte sequence for encoding "UTF8": 0xe1 0x73 0x20

2020-09-28 16:45:50.552 -03 [4044] LOG: el sistema de bases de datos fue apagado en 2020-09-28 16:45:48 -03
2020-09-28 16:45:50.598 -03 [4000] LOG: el sistema de bases de datos está listo para aceptar conexiones
2020-09-28 16:45:50.614 -03 [2240] FATAL: el sistema de base de datos está iniciándose
2020-09-28 16:47:05.511 -03 [6096] ERROR: invalid byte sequence for encoding “UTF8”: 0xe1 0x73 0x20

Corrí el comando para actualizar 2 veces, en la primera el log del postgres me recomendó incrementar el max_wal_size y lo llevé a 2GB
reinicié el servidor y volví a correr el comando para actualizar. Y ahí se puede ver nuevamente el error del encoding.

Saludos
Juan Pablo

Hola Juan buen día, intentar lo siguiente con la base:

CREAR BASE


             CREATE DATABASE mapuche
             WITH 
             OWNER = postgres
             ENCODING = 'LATIN1'
             LC_COLLATE = 'es_AR'
             LC_CTYPE = 'es_AR'
             TABLESPACE = pg_default
             CONNECTION LIMIT = -1;

Nota: si postgres no es su usuario utilizar el correcto, collate y ctype sino tiene es_AR intentar incorporar desde linux dpkg-reconfigure locales y seleccionar es_ar iso 8859 1 y es_ar utf-8,
también configurar locale, posiblemente en etc/default/locale. https://wiki.debian.org/es/Locale. Asegurarse que es_AR esté disponible desde postgresql

COPIAR BASE ORIGINAL CON:

 pg_dump -Z9 -h localhost -U postgres -Fc nombre_base > path/archivo.custom

RESTAURAR COPIA CON:

pg_restore -h localhost -U postgres -j20 -d nombre_base path/archivo.custom

Nota: -jXX <— reemplazar XX por la cantidad de procesos simultáneos que deseas para restaurar la base, suelen ir de la mano de los núcleos, 8,12… pero puedes ir probando diferentes valores.

La idea principal es, hacer una copia de la base original, crear una base con codificación LATIN1 y tipos es_AR, restaurar la copia y con eso debería funcionar correctamente la migración.

Saludos

Hola Juan Pablo, como estas?

Primero que todo te recomiendo partir de la base en producción, verificar los encoding que tenga y replicarlos.
Actualmente, la base de datos debe estar en encoding SQL-ASCII (si bien sabemos que funciona con otros, nuestros testeos los realizamos sobre este encoding).
Para crear la base desde el pgadmin, debes seleccionar encoding sqlascii y template0. Sino, desde linea de comandos seria algo asi:
CREATE DATABASE nombre_base WITH ENCODING=‘SQL_ASCII’ TEMPLATE=template0;

Luego haces el dump de la base y la restauras en la base que creaste (nombre_base).

Si esto no funciona, te pido por favor que nos ADJUNTES el log de postgres. Por ultimo, es importante verificar como esta definida la base actual.

Espero que te sea de ayuda.
Saludos, Nico.

PD: Si nos tenes que enviar algun dato sensible o que no pueda ser publico, lo podes realizar cargando un GDS.

Buenos días, lamentablemente no hubo caso. Levanté un GDS.
Si encontramos la solución la pasamos por el foro.

Saludos

Juan Pablo

Buenas, yo tengo un error parecido,
lo pudiste solucionar?

gracias!
Dario

Buenas,
este problema a mi se me presento usando debian 10, que supuestamente viene con estandar de php 7.3 y postgresql 11 en el repositorio.
lo termine solucionando armando un nuevo servidor con debian 9.

saludos! Dario