lo estoy probando en este instante te cuento el resultado
Gracias :)



Mariano Reingart wrote:
2009/10/2 Javier Fritz Aliste <javier.fritz@lanix.cl>
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