Hola.
Como estan, hace algun tiempo pedi ayuda sobre una solución de
replicación, he optado por PyReplica , y tengo el siguiente
problema.quizas de simple la solución,
Tengo 3 servidores, cada uno tiene conexión con dos maestros
remotos, funciona aceptablemente bien, esta montado en servidores con
salida a internet con un trafico aun de prueba.
Al grano, al realizar una insercion en una tabla que posee un
campo bigint, el triger esta capturando el query pero para el valor de
este campo lo concatena con "L", no se si esto es correcto, ya que al
ejectuar este query, se por el esclavo pyreplica o extrayendolo
manualmente y ejecutandolo sobre la base genera el error.
Hola Javier, parece ser un tema de conversión entre postgresql y
python, una solucion podria ser modificar el código del disparador en
plpython para que detecte los bigint de pg (long en python) y no le
agregue la L al convertirlos para el query sql:
# function to convert value from python to postgres representation
def mogrify(v):
if v is None: return 'NULL'
if isinstance(v,long):
return str(v) # no agregar L a long (bigint)
if isinstance(v,basestring):
r = repr(v)
if not r.startswith('\"'):
return r
else:
# postgres doesn't support ", replace and escape '
return "'%s'" % r.replace("'","\\'")[1:-1]
return "'%s'" % repr(v) # to get rid of bool that are passed as
ints (solved in pg8.3)
Lo que hay que agregar es la linea verde despues de if v is None..
(respetando la identación):
if isinstance(v,long): return str(v)
No lo probé pero tendría que funcionar, cualquier cosa avisame
Sds
Mariano