Replicar dados do Lakebase
Este guia mostra como publicar alterações de um banco de dados Lakebase em um assinante Postgres externo usando replicação lógica. O Lakebase atua como o editor: ele define uma publicação e o assinante externo se conecta para receber as alterações.
Pré-requisitos
- Um projeto Lakebase com a base de dados da qual pretende publicar, contendo as tabelas que pretende publicar.
- Uma função do Postgres do Lakebase que é membro da função
databricks_superuser, para criar a publicação. Esta é a função com a qual se liga, não a função que o subscritor utiliza. Você cria a função de replicação do assinante na primeira etapa. - Conexões de senha habilitadas no projeto. O assinante se conecta com uma função de senha nativa do Postgres, e as conexões de senha são desabilitadas por default para novos projetos. Consulte Gerenciar conexões de senha.
- Um banco de dados Postgres externo para atuar como assinante.
A replicação lógica está habilitada para o seu workspace pelo Databricks. O Lakebase está em execução em wal_level = logical por default, portanto, não há o passo por projeto para ativar a publicação.
Criar uma função de replicação
Crie uma função dedicada para o assinante externo se conectar como. O assinante se conecta com um nome de usuário e senha do Postgres, portanto, crie uma função de senha nativa do Postgres , não uma função OAuth. As funções OAuth autenticam com tokens do Databricks de curta duração, que a string de conexão de inscrição baseada em senha não pode usar. A função deve ter o atributo REPLICATION. As funções que você cria no aplicativo Lakebase, CLI ou API têm esse atributo, independentemente de você conceder a elas databricks_superuser. Na tab Adicionar função > Senha do aplicativo Lakebase, insira um nome de papel. Você não precisa selecionar databricks_superuser. Consulte Criar uma função de senha nativa do Postgres.
Para definir a senha você mesmo, crie a função com SQL. Inclua o atributo REPLICATION, pois as funções criadas com SQL não o recebem automaticamente:
CREATE ROLE replication_user WITH LOGIN REPLICATION PASSWORD '<password>';
Se a função não possui as tabelas que você replica, conceda acesso de leitura a ela:
GRANT USAGE ON SCHEMA public TO replication_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO replication_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO replication_user;
Criar uma publicação
Conecte-se ao banco de dados Lakebase como um membro da função databricks_superuser e, em seguida, crie uma publicação para as tabelas que deseja replicar. Cada tabela deve ter uma PRIMARY KEY ou uma identidade de réplica definida. Consulte Identidade da réplica na documentação do Postgres.
CREATE PUBLICATION my_publication FOR TABLE orders, customers;
Permitir que o assinante se conecte
O assinante externo se conecta ao Lakebase por meio do proxy de borda do Databricks, que aplica a lista de acesso de IP do workspace. Permita o endereço IP do assinante na lista de acesso de IP do workspace para que ele possa acessar seu banco de dados Lakebase. Consulte Gerenciar a lista de acesso IP.
O Private Link não é compatível com a conexão do assinante. O assinante se conecta pelo endpoint público do Lakebase.
Inscrever-se a partir do banco de dados externo
No banco de dados Postgres externo, crie as tabelas de destino com os mesmos nomes e colunas das tabelas que você publica. Crie-os vazios: a cópia inicial falha em key duplicadas ou violações de restrição se uma tabela de destino já contiver linhas. Você pode criar as tabelas manualmente ou despejar o esquema do Lakebase e carregá-lo no assinante. Veja Despejar apenas o esquema.
Em seguida, como uma função que pode criar inscrições no banco de dados externo, crie uma inscrição que se conecte ao Lakebase:
CREATE SUBSCRIPTION my_subscription
CONNECTION 'host=<lakebase-host> port=5432 dbname=<lakebase-db> user=replication_user password=<password> sslmode=verify-full sslrootcert=system'
PUBLICATION my_publication;
Use uma conexão direta para o assinante. A replicação lógica requer uma conexão persistente, portanto <lakebase-host> deve ser o hostname do seu endpoint direto, não o hostname do pooler de conexão -pooler. Consulte Agrupamento de conexões.
Lakebase enforces TLS on all connections, so traffic is always encrypted with no action needed. For the strongest protection, connect with sslmode=verify-full, which also verifies the Lakebase server certificate against your system's root store. Lakebase uses a publicly trusted certificate, so no extra certificate is needed. The weaker sslmode=require encrypts but does not verify the server.
Verificar replicação
No assinante, confirme se as linhas chegaram e verifique o atraso:
SELECT subname, received_lsn, latest_end_lsn, last_msg_receipt_time
FROM pg_catalog.pg_stat_subscription;
Para confirmar que a cópia inicial foi concluída, execute a query de status de sincronização por tabela em Monitorar replicação no assinante e aguarde até que cada tabela apresente Ready (fully live).
A conexão do assinante mantém um slot de replicação no editor do Lakebase. Embora um assinante esteja replicando ativamente, o compute do Lakebase não escala para zero. Consulte Replicação lógica e escala para zero. Se o assinante parar de consumir alterações, o slot ficará inativo e o Lakebase o removerá após cerca de 40 horas. Consulte Remoção automática de slots inativos.
Os passos seguintes
- Gerenciar replicação : Monitore publicações e slots, e solucione problemas. Veja Gerenciar e monitorar a replicação lógica.
- Migrar para o Lakebase : Replique um banco de dados Postgres externo para o Lakebase. Consulte Replicar dados para o Lakebase.
- Comparar métodos : Escolha a maneira certa de mover dados para dentro e para fora do Lakebase. Veja Mover dados para dentro e para fora do Lakebase.