PyReplica LEEME (wiki format):

PyReplica es un replicador asincrnico maestro-esclavo simple para PostgreSQL basado en Python, usando un disparador maestro en plpython, seales, secuencias, y un script cliente en python (influenciado por slony & londiste, pero mucho ms simple y fcil). 

Soporta adems una configuracin de multi-maestro asincrnica "perezosa" (replicacin en ambos sentidos, cada base de datos es un maestro y un esclavo al mismo tiempo). Cuidado: ud., o su aplicacin, deber tener en cuenta el manejo de secuencias y la resolucin de conflictos.

Recientemente se ha agregado soporte para servicio bsico en windows, mltiples esclavos y replicacin condicional mediante filtros escritos en Python (actualmente en fase de pruebas).

Esta programado en Python, apuntando a ser simple y flexible, permitiendo:
 * Fcil instalacin (simplemente ejecutar un script sql en el servidor, y copiar un script demonio en el cliente, no se requiere compilacin)
 * Fcil administracin (en general no necesita administracin para el uso normal, no es necesario aprender un nuevo conjunto de comandos o marco de trabajo)
 * Fcil adaptacin (manual) (scripts python simple y extensibles, permitiendo filtrar y/o transformar los datos replicados)
 * Eficiencia (bajo impacto de uso de memoria y red, sin polling)
 * Multiplataforma: corre bajo linux y windos. Probado en Debian (disparador y demonio) y Windows XP (solo disparador)

No hace:
 * Fail over automtico
 * Resolucin de conflictos (pero advierte al detectar conflictos de actualizacin/eliminacin y falla en conflictos de insercin o errores de integridad de datos)
 * Replicacin de cambios de esquema (los comandos CREATE/ALTER/etc. deben ejecutarse manualmente en todos los servidores, igualmente la tabla replica_log puede ser usada para propagarlos)
 * No hay soporte para objetos grandes (replica basada en el oid podra ser soportada en prximas versiones)

Consiste en un disparador plpythonu de registro (py_log_replica) y un script demonio esclavo (pyreplica.py y daemon.py)
El disparador almacena un registro de replicacin (instrucciones de manipulacin de datos INSERT,UPDATE,DELETE sobre las tablas afectadas en la tabla replica_log) y seala con un mensaje NOTIFY a las replicas.
El script esclavo cliente se conecta a ambas bases de datos (maestra y esclava), escucha las seales NOTIFY en la base maestra, y re-ejecuta el registro de replica en la base esclava cuando llega dicha seal. Utiliza secuencias y transacciones para evitar perdida de datos. 

El disparador detecta los cambios y los almacena usando la clave primaria de la base de datos. Por lo cual, si la tabla no tiene clave primaria, no puede ser replicada.

Como usa seales NOTIFY, la replicacin es practicamente instantnea y ms eficiente (sin polling). Si el cliente esta caido y las seales NOTIFY se pierden, cuando el cliente se conecta nuevamanete, automaticamente reejecuta los datos replicados "perdidos".

El script demonio de replicacin usa transacciones de commit en dos fases (TPC), para asegurarse que ambos servidores se actualizaron correctamente.
Puede configurarse para enviar notificaciones via correo electrnico (cuando el demonio de replicacin inicia, se detiene o tiene algn error o advertencia)

Pyreplica soporta todos los tipos de datos soportados por plpythonu que pueden ser representados como cadenas (incluyendo bytea). Los tipos Numeric sin precisin definida parecen tener una perdida menor de precisin.

Mediciones de rendimiento simple muestran que el disparador solo es un 50% ms lento que uno basado en C (como en slony-I), con los beneficios de que puede ser facilmente instalado, portado, mantenido y adaptado. (ver benchmarks.txt)

Ver INSTALAR.txt para el procedimiento de instalacin.
