Skip to main content
Bun é um runtime para JavaScript e TypeScript com um cliente Postgres integrado, o 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ção CREATE DATABASE no 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 com sslmode=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:
Vai adicionar a um aplicativo existente?Pule mkdir e bun init -y, já que o Bun.sql é nativo do Bun e não há nada para instalar. Na raiz do seu projeto, siga para Configure a conexão e adicione também NODE_EXTRA_CA_CERTS=./ca-certificate.pem antes do script de inicialização do seu aplicativo, para que ele consiga verificar o servidor.

Configure a conexão

Mova o certificado da CA que você baixou para o projeto e renomeie-o como ca-certificate.pem:
Crie um banco de dados para a aplicação. Substitua <PASSWORD> e o host pelos valores exibidos no modal Connect:
Adicione a URL de conexão do banco de dados 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
Se a senha contiver caracteres especiais, aplique a codificação de URL (URL-encode) nela. Mantenha o .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-full faz com que o Bun.sql verifique tanto a cadeia de certificados quanto o nome do host.
  • Não copie o parâmetro sslrootcert da URL do console. O Bun.sql não lê esse parâmetro: ele o repassa ao servidor como uma configuração de runtime, e a conexão falha com unrecognized configuration parameter "sslrootcert".
  • A variável NODE_EXTRA_CA_CERTS precisa 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 } de SQL resulta no erro certificate signature failure. Use NODE_EXTRA_CA_CERTS no lugar.

Criar uma tabela

Crie o arquivo setup.ts. Ele exibe o estado do TLS da sessão e cria uma tabela todos:
setup.ts
Execute-o:
Para confirmar que o certificado está sendo verificado, execute o arquivo sem o certificado da CA. A conexão será recusada:

Consultar o banco de dados

O Bun.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 arquivo server.ts com um endpoint /todos que lista e cria linhas:
server.ts
Inicie o servidor:
Em outro terminal, adicione uma linha:

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):
No console, abra o SQL Console e expanda guide_bun, depois public e, por fim, todos para ver as mesmas linhas:

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 em DATABASE_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:
Passe 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

Última modificação em 14 de outubro de 2026