Hace algunas entradas anteriores, hablamos sobre Bucardo y su utilidad para replicar Base de Datos PostgreSQL, vimos como instalar Bucardo y dimos los primeros pasos para sincronizar nuestras Base de datos; en específico, creamos una simple relación maestro-maestro de dos Base de Datos pertenecientes a distintos host.
Ahora les traigo un pequeño detalle que hay que tener en cuenta al momento de sincronizar las Base de Datos y se trata de sincronizar las secuencias:

Las secuencias y Bucardo
Las secuencias se emplean para generar valores enteros únicos para su asignación en las tablas asociadas; en otras palabras, son las empleadas para generar llaves primaria (Primary Key -PK-) para su posterior guardado en las tablas; por defecto Bucardo no sincroniza las secuencias para estos identificadores al insertar los registros replicados, dando como resultado una inconsistencia entre las base de datos a sincronizar (en lo que a las secuencias se refiere); sin embargo tenemos varias maneras de solucionar esto; primero la más fácil:
1.0 Modificar la secuencia de los contadores
Imaginemos que tenemos dos Base de Datos, en redes distintas que para sincronizarse requieren de una conexión a Internet:

Sin embargo, en al menos una de las redes no es posible contar con una conexión a Internet permanente (salvo unas pocas horas al día) dando como resultado que la sincronización no puede llevarse a cabo de manera regular.
Para empeorar la situación, ambas Base de Datos son actualizadas por usuarios distintos todo el tiempo.
¿Qué podríamos hacer si deseamos sincronizar estas dos Base de Datos?
1.1 Evitar la colisión de registros
Podemos manejar secuencias distintas para que los registros nunca sean solapados y al sincronizar las Base de Datos jamás colisionarán los identificadores de las Base de Datos (o indicar que la PK del registro a insertar ya existe):
Secuencia BD1 = START WITH 1 INCREMENT BY 2.
Secuencia BD2 = START WITH 2 INCREMENT BY 2.También podemos emplear intervalos diferentes; es decir, comenzar el contador en alguna de las Base de Datos en 1 y la otra en 100000000:
Secuencia BD1 = START WITH 1.
Secuencia BD2 = START WITH 100000000.Ambos escenarios los puedes ver en el siguiente enlace Pushdelta syncs and sequences.
1.2 Sincronizando las secuencia con Bucardo
El otro escenario es indicar que -además de las tablas- también sincronicen las secuencias; para ello empleamos el siguiente comando:
$ bucardo add <sequences> db=dbname=<nombrebd> relgroup=<nombrerelgroup>En dónde <sequences> son las secuencias a sincronizar; si deseamos sincronizar todas las secuencias en nuestra Base de Datos:
$ bucardo add all sequences db=dbname=<nombrebd> relgroup=<nombrerelgroup>Siguiendo nuestro ejemplo que vimos en la entrada anterior de Bucardo, para hacer una sincronización tanto de las tablas como de sus secuencias son necesarias los siguientes comandos:
$ bucardo add database oo2local dbname=oo2 user=postgres pass=postgres
$ bucardo add database ooremoto dbname=oo user=postgres pass=XXXX host=XXXXX
$ bucardo add dbgroup mydbgroup midblocal:source midbremoto:source
$ bucardo add all tablerelgroup=myrelgroup db=midblocal
$ bucardo add all sequences db=midblocal relgroup=myrelgroup
$ bucardo add sync mysync relgroup=myrelgroup dbs=mydbgroup autokick=0
$ bucardo update sync mysync autokick=1La muy buena noticia es que si estabas usando el esquema planteado en la entrega anterior (todas la tablas sin los esquemas), puedes ejecutar esta simple línea:
$ bucardo add all tablerelgroup=myrelgroup db=midblocalPara indicarle a Bucardo que también sincronice las secuencias y listo; no es necesario reiniciar o actualizar más nada, Bucardo tomará las nuevas configuraciones automáticamente; aun así si quieres saber que los cambios que aplicaste están siendo realmente tomados por Bucardo, basta con ejecutar el siguiente comando:
linux1@linux1-Lenovo-3000:~$ bucardo status mysync
======================================================================
Last good : Aug 13, 2026 12:04:39 (time to run: 8s)
Rows deleted/inserted : 1 / 1
Sync name : mysync
Current state : Good
Source relgroup/database : myrelgroup / midblocal
Tables in sync : 47
Status : Active
Check time : None
Overdue time : 00:00:00
Expired time : 00:00:00
Stayalive/Kidsalive : Yes / Yes
Rebuild index : No
Autokick : Yes
Onetimecopy : No
Post-copy analyze : Yes
Last error: :
======================================================================Bucardo agrega en Tables in sync el total de las tablas y secuencias a sincronizar; como mi Base de Datos cuenta con 29 tablas y 18 secuencias que en total dan 47 tablas y secuencias.
Otra forma de sincronizar tanto tablas como secuencias es agregarlas explícitamente a su grupo de relaciones (relgroup):
# 1. Crear las bases de datos (midblocal y midbremoto)
bucardo add database midblocal dbname=oo2 user=postgres pass=postgres
bucardo add database midbremoto dbname=oo user=postgres pass=XXXX host=XXXXX
# 2. Crear el grupo de bases de datos
bucardo add dbgroup mydbgroup midblocal:source midbremoto:source
# 3. Crear el grupo de relaciones (myrelgroup)Agregar Tablas al Grupo de Relaciones
$ bucardo add all tables db=midblocal relgroup=myrelgroup(Esto agrega todas las tablas de midblocal al grupo myrelgroup.)
Agregar Secuencias al Grupo de Relaciones
Este comando es vital para garantizar que los contadores de las claves primarias se mantengan sincronizados:
$ bucardo add all sequences db=midblocal relgroup=myrelgroupCrear y Activar la Sincronización
$ bucardo add sync mysync relgroup=myrelgroup dbs=mydbgroup autokick=0
$ bucardo update sync mysync autokick=1
$ bucardo startCon estos pasos asegura que todas las tablas y todas las secuencias están siendo monitoreadas y sincronizadas por Bucardo.
Bucardo: el sistema de replicación para PostgreSQL
Como especifica el título para esta entrada, Bucardo es un sistema de replicación que en otras palabras permite "clonar" o "duplicar" registros dentro Base de Datos (fuentes-objetivos), además cuenta con soporte para manejar múltiples Base de Datos con relaciones maestros-esclavos.
Aunque el fuente debe ser una Base de Datos PostgreSQL el objetivo puede ser PostgreSQL, MySQL, Redis, Oracle, MariaDB, SQLite, o MongoDB.
Los pasos para instalar Bucardo en Linux es muy sencillo (como veremos en la siguiente sección) aunque Bucardo puede ser un poco difícil de instalar debido a varias configuraciones y dependencias necesarias a nivel del Sistema Operativo pero en esta entrada podrás encontrar una sección en donde hablamos de Errores que me ocurrieron mientras instalaba Bucardo.
Esta entrada ofrece una rápida pero completa vista a Bucardo comenzando por su instalación en un ambiente Linux, su configuración, algunos errores que te pueden aparecer en el proceso de su instalación y culminado la entrada realizando un pequeño experimento con una simple relación Maestro-Maestro con Base de Datos PostgreSQL.
Instalando Bucardo en Ubuntu -parte 1-
En esta sección daremos unos tips de como instalar Bucardo en su versión 5.6.0 en Ubuntu, aunque el procedimiento es el mismo para otras distribuciones Linux; primero descargamos el Bucardo.tar.gz desde la sección de descargas.
Desempaquetamos el paquete y nos ubicamos desde la terminal en la carpeta; para el momento en que se escribió esta entrada es la versión es la 5.6.0:
$ cd Bucardo-5.6.0/Generamos el Makefile:
$ perl Makefile.PL Generating a Unix-style Makefile Writing Makefile for Bucardo Writing MYMETA.yml and MYMETA.jsonLo más recomendable es que obtengas tu copia de bucardo desde su repositorio de GitHub en: git clone git://bucardo.org/bucardo.git
Finalmente instalamos Bucardo:
$ make make installEn Fedora existe otro método para hacernos con una copia de Bucardo, y consiste en instalarlo mediante los repositorios:
$ rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-6.noarch.rpm yum -y install bucardoForma moderna
Esto son los pasos más actuales que puedes seguir para instalar Bucardo.
Debes de tener instalado los siguientes paquetes:
$ sudo apt update
$ sudo apt install git postgresql-server-dev-XX libdbi-perl libdbd-pg-perl libclone-perl makeDescargar:
$ git clone https://github.com/bucardo/bucardo.git
$ cd bucardo/Generar e instalar:
perl Makefile.PL
make
sudo make installEjecutar la instalación de Bucardo:
$ bucardo installConfigurando el ambiente en PostgreSQL para Bucardo
Una vez que instalamos la primera fase de Bucardo a través de los Makefile, vamos a PGAdmin o cualquier otro Administrador y creamos una Base de Datos y Rol (con SuperUsuario) llamada "bucardo":

Configurando Bucardo -parte 2-
Ahora seguiremos con la instalación de Bucardo según las configuraciones realizadas en PostgreSQL; para ello debemos ejecutar en un terminal:
$ bucardo installo -dependiendo de la fuente de instalación.-
$ bucardo_ctl installVeremos la siguiente información:
Current connection settings: 1. Host: <none> 2. Port: 5432 3. User: postgres 4. Database: bucardo 5. PID directory: /var/run/bucardoSi el directorio /var/run/bucardo no existe, créelo a través de: mkdir /var/run/bucardo
Se especifica el Host, usuario y base de datos creados anteriormente:
Current connection settings: 1. Host: localhost 2. Port: 5432 3. User: bucardo 4. Database: bucardo 5. PID directory: /var/run/bucardo
Errores que me ocurrieron mientras instalaba Bucardo:
ERROR: language "plperlu" does not exist: Instalamos el paquete con Instalamos el paquete consudo yum install postgresql-plperl, luego de la instalación en la Base de Datos de Bucardo corrermos: CREATE EXTENSION plperl; CREATE LANGUAGE plperlu;ERROR: permission denied for language plperluColoque al usuario como SuperUser desde la interfaz de pgAdmin- Para algún error concerniente a la autenticación; recuerda colocar en el
pg_hba.confubicado en/etc/postgresql/X.X/main/p: - local bucardo bucardo md5
- Si al ejecutar un comando de Bucardo aparece el siguiente error: DBI connect('dbname=bucardo','bucardo',...) failed: fe_sendauth: no password supplied at /usr/local/bin/bucardo line 308. Puedes solventar el error modificando el archivo señalado en el error (/usr/local/bin/bucardo), buscar la línea de código señalada:

- Y agregar la contraseña de Bucardo:

Si todo sale bien y no ocurrió algún otro error, FELICIDADES, acabas de completar la instalación de Bucardo y ahora puedes crear todas las relaciones entre Base de Datos que quieras.
Creando una relación Maestro-Maestro con Bucardo
En esta última sección veremos cómo crear una simple relación maestro esclavo con los comandos de Bucardo los cuales explicaré brevemente a continuación:
- Primero creamos las Base de Datos; si son locales no es necesario especificar el
host: bucardo add database <nombre> dbname=<nombrebd> user=<usuariobd> pass=<contraseñabd> - para agregar las tablas y secuencias a sincronizar: bucardo add table <tabla1> <tabla2> … relgroup=<nombrerelgroup>
- Creamos un grupo de Base de Datos para poder sincronizarlas fácilmente más adelante: bucardo add dbgroup <nombredbgroup> <nombrebd>:source <nombrebd>:source
- Ahora creamos la sincronización con: bucardo add <nombresync> mysync relgroup=<nombrerelgroup> dbs=<nombredbgroup> autokick=0
- Y activamos la sincronización: bucardo update sync <nombresync> autokick=1
Puedes encontrar la documentación oficial y completa en los enlaces al final de esta entrada.
Una vez entendido los comando básicos para crear un sistema de replicación, ahora vamos a crear una relación Maestro-Maestro en donde una de las Base de Datos se encuentra local y otra remota; para ello empleamos los siguiente comandos:
bucardo add database midblocal dbname=oo user=bucardo pass=bucardo bucardo add database midbremoto dbname=oo user=postgres pass=postgres host=<IPRemota> bucardo add table public.estatus db=midblocal relgroup=myrels bucardo add dbgroup mydbgroup midblocal:source midbremoto:source bucardo add sync mysync relgroup=myrels dbs=mydbgroup autokick=0 bucardo update sync mysync autokick=1 bucardo reload configFinalmente iniciamos Bucardo con:
$ bucardo startY verificamos su estatus con:
$ bucardo statusAhora prueba insertar registros en cualquiera de las tablas de las Base de Datos que estén sincronizadas y deberían replicarse para mantenerse sincronizadas.
Algunos enlaces de interés:
Acepto recibir anuncios de interes sobre este Blog.
Como especifica el título para esta entrada, Bucardo es un sistema de replicación que en otras palabras permite "clonar" o "duplicar" registros de una Base de Datos a otras Base de Datos (fuente-objetivo), también, te mostraré cómo sincronizar las secuencias de una Base de Datos PostgreSQL empleando Bucardo.