El post de hoy de un vistazo:
- La importancia de PostgreSQL 17 y su nueva funcionalidad.
- Guía para convertir una réplica física en una lógica usando pg_createsubscriber.
- Explicación detallada y demostración del proceso de conversión paso a paso.
- Breve resumen de todo lo anterior.
Introducción
Amigos de las bases de datos, ¡vamos a explorar nuevos horizontes! El mundo de las bases de datos está en constante evolución, y PostgreSQL 17 nos muestra el futuro con su nueva función.
¿Te has frustrado alguna vez con la rigidez de las réplicas físicas? Pues bienvenido a una técnica mejorada para convertir una réplica física en una lógica usando una herramienta llamada pg_createsubscriber.
Veamos paso a paso como hacer el mejor uso de ella. ¡Al turrón!
Paso 0 – Tener una instancia primaria
Todo el mundo sabe que para crear una clon se necesita un original y en este caso no es diferente.
Si no tenéis ya una para probar, podéis crear una instancia básica rápidamente:
postgres@localhost: initdb --version
initdb (PostgreSQL) 17devel
postgres@localhost: initdb -D /var/tmp/source
Editamos el fichero de auto.conf con al menos los siguientes parámetros para permitir ambos tipos de replicación:
wal_level=logical
max_replication_slots=10
hot_standby=on
port=8888
A arrancamos:
postgres@localhost: pg_ctl -D /var/tmp/source start
Paso 1 – Crear una Réplica Física
Una vez tenemos nuestra primaria, creamos una réplica física que se sincronice con ella:
postgres@localhost: pg_basebackup -D /var/tmp/target --write-recovery-conf -p 8888
postgres@localhost: pg_ctl -D /var/tmp/target/ start
Ahora nos hace falta comprobar que la replicación funciona, así que vamos a popular la primaria directamente desde psql:
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
department VARCHAR(50),
email VARCHAR(100)
);
INSERT INTO employees (name, department, email) VALUES
('John Doe', 'Engineering', 'john.doe@example.com'),
('Jane Smith', 'Marketing', 'jane.smith@example.com'),
('Emily Jones', 'Human Resources', 'emily.jones@example.com');
Y a comprobar que la standby que acabamos de crear ha recibido la información correctamente:
postgres@localhost: cd /var/tmp/target/
postgres@localhost: psql -c "select count(*) from employees" -p 8889
count
---------
3
(1 row)
Paso 2 – Cambiar a replicación lógica
Y ahora sí, por fin viene la magia. Vamos a usar pg_createsubscriber para cambiar el tipo de replicación. Eso sí, asegúrate de apagar la réplica antes de lanzarlo:
postgres@localhost: pg_ctl -D /var/tmp/target/ stop
postgres@localhost: cd
postgres@localhost: pg_createsubscriber --database=postgres --pgdata=/var/tmp/target --subscriber-port=8889 --publisher-server='user=postgres passfile=''/home/postgres/.pgpass'' channel_binding=prefer port=8888 sslmode=prefer sslcompression=0 sslcertmode=allow sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres gssdelegation=0 target_session_attrs=any load_balance_hosts=disable' --subscriber-username=postgres --publication=pub1 --subscription=sub1
NOTA: Para que no quede un post extremadamente largo no estoy incluyendo los logs de la operación (que si estáis siguiendo el tutorial paso a paso, deberían estar saliendo por pantalla en este mismo instante) pero leedlos bien porque es ahí donde podemos observar el detalle de como se está cambiando el tipo de replicación.
Una vez terminado el proceso, arrancamos de nuevo:
postgres@localhost: pg_ctl -D /var/tmp/target/ stop
Y la prueba de fuego, comprobar que tenemos el sistema funcionando. Es decir, publicación en nuestra master y subscripción en nuestra réplica:
postgres@localhost: psql -p 8888 -c "select * from pg_publication"
oid | pubname | pubowner | puballtables | pubinsert | pubupdate | pubdelete | pubtruncate | pubviaroot
-------+---------+----------+--------------+-----------+-----------+-----------+-------------+------------
14437 | pub1 | 10 | t | t | t | t | t | f
(1 row)
postgres@localhost: psql -p 8889 -c "select * from pg_subscription"
oid | subdbid | subskiplsn | subname | subowner | subenabled | subbinary | substream | subtwophasestate | subdisableonerr | subpasswordrequired | subrunasowner | subfailover | >
-------+---------+------------+---------+----------+------------+-----------+-----------+------------------+-----------------+---------------------+---------------+-------------+------------------------------------------------------------------------------------------->
24576 | 5 | 0/0 | sub1 | 10 | t | f | f | d | f | t | f | f | user=postgres passfile=/home/postgres/.pgpass channel_binding=prefer port=8888 sslmode=pre>
(1 row)
Conclusión
La llegada de pg_createsubscriber en PostgreSQL 17 trae consigo un nuevo horizonte para los DBAs.
Esta técnica de conversión es un cambio en las reglas del juego, que ofrece flexibilidad y garantiza la consistencia de los datos, haciendo de PostgreSQL una herramienta aún más admirada en el mundo de las bases de datos.
Únete a la lista de emails para no perderte nada
No tengo ningún producto, publicidad, ni nada que venderte. De hecho, aún no tengo nada que hacer con estos emails. Pero si te interesa estar en contacto o no perderte las próximas actualizaciones en el futuro… Ya sabes 😉
¿Quieres trabajar con nosotros?
Ya sea que necesites mejorar el rendimiento de consultas existentes, planificar y ejecutar migraciones de datos críticas, diseñar bases de datos desde cero o mantener un entorno de base de datos estable, estamos aquí para ayudarte.
Trabajamos con una amplia variedad de sistemas de gestión de bases de datos (DBMS) y estamos comprometidos en proporcionar soluciones adaptadas a tus necesidades específicas. Puedes consultar nuestra lista completa de servicios aquí.
Confía en nosotros para optimizar tus bases de datos y liberar tiempo y recursos para que puedas concentrarte en lo que realmente importa: hacer crecer tu negocio.
¡Contáctanos hoy mismo y descubre cómo podemos ayudarte a lograr un rendimiento óptimo en tu entorno de bases de datos!
Deja una respuesta