This guide provides step-by-step instructions to connect your TimescaleDB database to Sequin. TimescaleDB is an open-source database built on Postgres that’s optimized for time-series data.

Setting up TimescaleDB

If you don’t have a TimescaleDB instance yet, you can set one up using Docker:

docker run -d --name timescaledb -p 5432:5432 \
-e POSTGRES_PASSWORD=postgres \
timescale/timescaledb-ha:pg16

Enable logical replication

To determine if logical replication is already enabled for your TimescaleDB instance, you can run the following SQL command:

show wal_level;

This command should return logical. If it doesn’t, you’ll need to enable it by setting wal_level to logical.

Enabling replication requires a restart of your database.
1

Configure WAL level

Connect to your TimescaleDB container and edit the PostgreSQL configuration:

# Connect to the container
docker exec -it timescaledb bash

# Edit postgresql.conf
echo "wal_level = logical" >> /home/postgres/pgdata/data/postgresql.conf

# Exit the container
exit

# Restart the container for changes to take effect
docker restart timescaledb

You can also find the location of your postgresql.conf file by running the SQL command show config_file;.

Provision a Postgres user for Sequin

When in development, it’s probably fine to supply Sequin with an existing user.

However, when in production, you should create a dedicated user for Sequin. The user needs the following permissions:

  1. connect permission on the database.
  2. select permission on all the tables you want to connect to Sequin.
  3. replication permission to read from replication slots.

Here’s how to create a dedicated user with the minimum required permissions:

-- Create user with a secure password
create user sequin_user with password 'REPLACE_WITH_SECURE_PASSWORD';

-- Grant connect permission
grant connect on database your_database to sequin_user;

-- Grant select permission on tables you want to replicate
grant select on table table1, table2, table3 to sequin_user;
-- OR grant select on all tables in a schema
grant select on all tables in schema public to sequin_user;

-- Grant replication permission
alter user sequin_user with replication;

To generate a secure password, if you have OpenSSL installed, you can use the following command:

openssl rand -base64 32

Connect Sequin to your TimescaleDB database

After enabling logical replication, you’ll now connect to your database in Sequin:

1

Enter connection details in Sequin

In the Sequin Console, click on the “Connect Database” button and enter the credentials for your TimescaleDB database:

  • Host: Your TimescaleDB host (e.g., localhost or your Docker machine IP)
  • Port: 5432 (default Postgres port)
  • Database: Your database name
  • Username: The sequin database user you created earlier
  • Password: The password for your sequin database user
2

Create a publication

Connect to your database using the SQL client of your choice and execute the following SQL query to create a publication:

create publication sequin_pub for all tables;
3

Create a replication slot

Next, create a replication slot to capture changes from the publication:

select pg_create_logical_replication_slot('sequin_slot', 'pgoutput');
4

Enter the replication slot details in Sequin

Back in the Sequin Console, enter the name of the replication slot (e.g. sequin_slot) and publication (e.g. sequin_pub) you just created. Then, name your database and click “Create Database”.

Create a sink

With your TimescaleDB database connected to Sequin, you are ready to create a sink. Follow one of our guides below to get started: