Bun.sql, então você não precisa instalar um driver.
Neste guia, você vai conectar o Bun ao ClickHouse Managed Postgres por meio de TLS verificado, criar uma tabela, executar consultas e uma transação e servir as linhas via HTTP com Bun.serve.
Pré-requisitos
- Bun 1.4 ou superior. Este guia foi testado com o Bun 1.4.2 e o Postgres 18.
- Uma conta do ClickHouse Cloud.
psql, para criar o banco de dados. Você também pode executar a instruçãoCREATE DATABASEno SQL Console.
Crie um serviço ClickHouse Managed Postgres
No console do ClickHouse Cloud, clique em New service e selecione Postgres. A instância fica pronta em poucos minutos. Para um passo a passo completo, consulte o guia de início rápido.Obtenha os detalhes de conexão
Abra seu serviço e clique em Connect na barra lateral esquerda. Mantenha Directly selecionado e ative Use SSL. A URL passará a terminar comsslmode=verify-full&sslrootcert=.... Clique em Download CA certificate para baixar o certificado da CA da sua instância.
Este guia faz a conexão diretamente pela porta 5432. Um aplicativo Bun.serve é um processo de longa duração, e o Bun.sql mantém seu próprio pool de conexões, então não é necessário um pooler do lado do servidor. Se você executa muitos processos Bun de curta duração, consulte Conectar por meio do PgBouncer.
Configure o projeto
Crie um projeto:Configure a conexão
Mova o certificado da CA que você baixou para o projeto e renomeie-o comoca-certificate.pem:
<PASSWORD> e o host pelos valores exibidos no modal Connect:
guide_bun ao arquivo .env, criando-o caso ainda não exista. O Bun carrega o .env automaticamente, e a exportação sql do bun lê a variável DATABASE_URL:
.env
.env fora do controle de versão.
Adicione estes scripts ao package.json, mesclando-os ao bloco scripts caso ele já exista. Eles repassam o certificado da CA ao Bun por meio de NODE_EXTRA_CA_CERTS:
package.json
Como o Bun verifica o certificado do servidor
sslmode=verify-fullfaz com que oBun.sqlverifique tanto a cadeia de certificados quanto o nome do host.- Não copie o parâmetro
sslrootcertda URL do console. OBun.sqlnão lê esse parâmetro: ele o repassa ao servidor como uma configuração de runtime, e a conexão falha comunrecognized configuration parameter "sslrootcert". - A variável
NODE_EXTRA_CA_CERTSprecisa estar definida no ambiente no momento em que o Bun é iniciado. O Bun não a lê do.env, por isso ela está nos scripts. - No Bun 1.4.2, passar o certificado baixado pela opção
tls: { ca }deSQLresulta no errocertificate signature failure. UseNODE_EXTRA_CA_CERTSno lugar.
Criar uma tabela
Crie o arquivosetup.ts. Ele exibe o estado do TLS da sessão e cria uma tabela todos:
setup.ts
Consultar o banco de dados
OBun.sql usa tagged templates. Cada valor interpolado é enviado como um parâmetro de bind (bind parameter), então é seguro passar entradas do usuário. Crie o arquivo queries.ts:
queries.ts
sql.begin executa o callback dentro de uma transação. Ele faz o commit quando o callback retorna e o rollback se o callback lançar uma exceção.
Execute:
Disponibilize as linhas via HTTP
Crie o arquivoserver.ts com um endpoint /todos que lista e cria linhas:
server.ts
Verificação
Abra http://localhost:3106/todos no navegador para ver todas as linhas. A resposta será semelhante a esta (formatada para facilitar a leitura):Conectar por meio do PgBouncer
Se você executa muitos processos Bun de curta duração, conecte-se pelo PgBouncer incluído. Selecione via PgBouncer no modal Connect e altere a porta emDATABASE_URL para 6432. O certificado da CA e sslmode=verify-full continuam os mesmos.
O PgBouncer opera no modo de pooling de transações. Por padrão, o Bun.sql usa prepared statements nomeados e, em nossos testes, eles funcionaram pelo PgBouncer sem erros. Se ocorrerem erros prepared statement does not exist, crie o cliente com prepare: false:
prepare como opção, e não na URL. Assim como acontece com sslrootcert, um parâmetro de URL prepare=false é repassado ao servidor e rejeitado.
Próximos passos
- Conexão: strings de conexão, PgBouncer e TLS
- Configurações: altere os parâmetros do Postgres e do PgBouncer
- Réplicas de leitura: escale as leituras
- Documentação do Bun SQL: a API completa do
Bun.sql