TimescaleDB es una extensión de Postgres de código abierto desarrollada por Timescale Inc
que busca mejorar el rendimiento de las consultas analíticas sin tener que dejar Postgres. Esto se logra mediante
la creación de “hypertables”, que son administradas por la extensión y admiten el particionado automático en “fragmentos”.
Las hypertables también admiten compresión transparente y almacenamiento híbrido fila-columnar (conocido como “hypercore”), aunque estas
características requieren una versión de la extensión con licencia propietaria.
Timescale Inc también ofrece dos servicios gestionados para TimescaleDB:
Managed Service for Timescale
Timescale Cloud.
Existen proveedores externos que ofrecen servicios gestionados que le permiten usar la extensión TimescaleDB, pero debido a
las restricciones de licencia, estos proveedores solo admiten la versión de código abierto de la extensión.
Las hypertables de Timescale se comportan de manera diferente a las tablas normales de Postgres en varios aspectos. Esto plantea algunas complicaciones
para el proceso de replicación, por lo que la capacidad de replicar hypertables de Timescale debe considerarse
best effort.
Versiones de Postgres compatibles
ClickPipes es compatible con Postgres 12 y versiones posteriores.
Habilitar la replicación lógica
Los pasos que deben seguirse dependen de cómo esté desplegada su instancia de Postgres con TimescaleDB.
- Si usa un servicio gestionado y su proveedor aparece en la barra lateral, siga la guía correspondiente a ese proveedor.
- Si despliega TimescaleDB por su cuenta, siga la guía genérica.
Para otros servicios gestionados, abra un ticket de soporte con su proveedor para que le ayude a habilitar la replicación lógica si aún no está habilitada.
Timescale Cloud no permite habilitar la replicación lógica, que es necesaria para los pipes de Postgres en modo CDC.
Como resultado, los usuarios de Timescale Cloud solo pueden realizar una carga única de sus datos (Initial Load Only) con el
ClickPipe de Postgres.
Las hypertables de Timescale no almacenan directamente los datos insertados en ellas. En su lugar, los datos se almacenan en varias
tablas “fragmento” correspondientes que se encuentran en el esquema _timescaledb_internal. Para ejecutar consultas sobre las hypertables, esto no supone ningún
problema. Pero durante la replicación lógica, en lugar de detectar los cambios en la hypertable, los detectamos en la tabla “fragmento”
correspondiente. El ClickPipe de Postgres incluye la lógica necesaria para reasignar automáticamente los cambios de las tablas “fragmento” a la hypertable principal,
pero esto requiere pasos adicionales.
Si solo quieres realizar una carga única de tus datos (Initial Load Only), omite el paso 2 y los siguientes.
-
Crea un usuario dedicado para ClickPipes:
CREATE USER clickpipes_user PASSWORD 'some-password';
-
Otorga acceso de solo lectura a nivel de esquema al usuario que creaste en el paso anterior. El siguiente ejemplo muestra los permisos para el esquema
public. Repite estos comandos para cada esquema que contenga tablas que quieras replicar:
GRANT USAGE ON SCHEMA "public" TO clickpipes_user;
GRANT SELECT ON ALL TABLES IN SCHEMA "public" TO clickpipes_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA "public" GRANT SELECT ON TABLES TO clickpipes_user;
-
Otorga privilegios de replicación al usuario:
ALTER USER clickpipes_user WITH REPLICATION;
-
Como superusuario o administrador de Postgres, crea una publicación con las hypertables que quieras replicar. La publicación también debe incluir todo el esquema
_timescaledb_internal para que el pipe pueda recibir cambios de los fragmentos subyacentes. Recomendamos encarecidamente incluir solo las tablas que necesites en la publicación para evitar sobrecarga de rendimiento.
Cualquier tabla incluida en la publicación debe tener definida una clave primaria o tener configurada su identidad de réplica como FULL. Consulta las Preguntas frecuentes de Postgres para obtener orientación sobre cómo delimitar su alcance.
-- Al agregar nuevas tablas al ClickPipe, también deberás añadirlas manualmente a la publicación.
CREATE PUBLICATION clickpipes FOR TABLE table_to_replicate, table_to_replicate2, TABLES IN SCHEMA _timescaledb_internal;
La publicación clickpipes contendrá el conjunto de eventos de cambio generados a partir de las tablas especificadas, y más adelante se usará para ingestar el flujo de replicación.
Algunos servicios gestionados no otorgan a sus usuarios administradores los permisos necesarios para crear una publicación para un esquema completo. Si este es el caso, abre un ticket de soporte con tu proveedor. Como alternativa, puedes omitir este paso (y los pasos siguientes) y realizar en su lugar una carga única de tus datos.
Después de estos pasos, deberías poder continuar con la creación de un ClickPipe.
Si desea restringir el tráfico hacia su instancia de Timescale, añada las IP NAT estáticas documentadas a la lista de permitidos.
Las instrucciones para hacerlo varían según el proveedor; consulte la barra lateral si su proveedor figura allí o abra un
ticket con su equipo de soporte.