PostgreSQL 30 de agosto, 2023 • 4 min de lectura

pg_basebackup: ERROR replication slot does not exist

Solución al error "replication slot does not exist" al ejecutar pg_basebackup en PostgreSQL 10.

El problema

El error que se muestra a continuación se presentó en PostgreSQL versión 10. El error indica que no existe un slot con ese nombre. El sistema continúa con la replicación, pasa todos los datos, pero al finalizar genera un error con código de salida 1.

[root@repanalitica ~]# date; pg_basebackup -h 192.168.10.235 -U repuser -X stream -S replica1 -v -R -W -D /var/lib/pgsql/10/data ; date
Password: 
pg_basebackup: initiating base backup, waiting for checkpoint to complete
pg_basebackup: checkpoint completed
pg_basebackup: write-ahead log start point: 17454/AB000028 on timeline 1
pg_basebackup: starting background WAL receiver
pg_basebackup: could not send replication command "START_REPLICATION": ERROR:  replication slot "replica1" does not exist
pg_basebackup: write-ahead log end point: 1745C/37BC8CA8
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: child process exited with exit code 1
pg_basebackup: removing data directory "/var/lib/pgsql/10/data"
Fri Aug 25 00:02:42 -05 2023

Como se puede observar, el proceso falla y elimina el directorio de datos, perdiendo todo el trabajo de replicación.

La solución

Si ocurre este mensaje de error, es mejor suprimir la opción -S (replication slot) y dejar el comando de la siguiente forma:

[root@repanalitica 10]# date; pg_basebackup -h 192.168.10.235 -U repuser -X stream -v -R -W -D /var/lib/pgsql/10/data ; date
Tue Aug 29 18:49:59 -05 2023
Password: 
pg_basebackup: initiating base backup, waiting for checkpoint to complete
pg_basebackup: checkpoint completed
pg_basebackup: write-ahead log start point: 175B4/BE000060 on timeline 1
pg_basebackup: starting background WAL receiver
pg_basebackup: write-ahead log end point: 175DC/71D14BC0
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: base backup completed
Wed Aug 30 03:55:31 -05 2023

Como se puede apreciar, el comando se ejecutó de forma exitosa y se replicaron 1.8 TB de datos. Por eso el tiempo de inicio marca 18:49 y el tiempo de fin marca 03:55 (aproximadamente 9 horas).

Comparación de comandos

❌ Comando con error

pg_basebackup -h 192.168.10.235 -U repuser -X stream -S replica1 -v -R -W -D /var/lib/pgsql/10/data

✅ Comando correcto

pg_basebackup -h 192.168.10.235 -U repuser -X stream -v -R -W -D /var/lib/pgsql/10/data

Explicación de las opciones

  • -h: Host del servidor maestro
  • -U: Usuario de replicación
  • -X stream: Transmitir WAL mientras se ejecuta el backup
  • -S: Nombre del replication slot (causa el error si no existe)
  • -v: Modo verbose (muestra progreso)
  • -R: Crea archivos de configuración para standby
  • -W: Solicita contraseña
  • -D: Directorio de destino

💡 ¿Qué son los replication slots?

Los replication slots garantizan que el servidor maestro no elimine los archivos WAL necesarios hasta que todas las réplicas los hayan recibido. Son útiles para:

  • Prevenir la pérdida de datos en réplicas que se desconectan temporalmente
  • Garantizar la consistencia en replicaciones de larga duración
  • Evitar que el maestro elimine WAL antes de que la réplica los procese

Sin embargo, si el slot no existe en el servidor maestro, es mejor omitir la opción -S.

⚠️ Advertencia:

Si decides usar replication slots, asegúrate de crearlos previamente en el servidor maestro con: SELECT pg_create_physical_replication_slot('nombre_slot');