Back-End

16 jun, 2026

Tutorial de Knex.js com TypeScript e PostgreSQL

Publicidade

No tutorial de hoje eu vou te ensinar como usar o query builder Knex.js em aplicações Node.js para interagir com o banco de dados PostgreSQL. Não sabe o que é um query builder? Calma que eu já vou explicar, apenas tenha em mente que este é um tutorial para quem já sabe Node.js, TypeScript e já conhece também o banco Postgres.

Caso precise de um conhecimento básico/reforço em TS, use este tutorial.

#1 – Driver nativo x Query Builder x ORM

Quando vamos criar uma aplicação que se conecta a um banco de dados para consultar e guardar dados nós temos três abordagens para fazê-lo:

  • usando o driver nativo do banco para nossa linguagem;
  • usando um query builder;
  • usando um ORM (Object-Relationship Manager);

Cada uma dessas três abordagens possui suas vantagens e desvantagens, bem como seus admiradores e detratores. Resumidamente, nós temos o seguinte comparativo:

  • Driver: a forma “oficial”, com maior performance e que dá o maior trabalho (menos produtiva) por envolver uso direto de SQL e nenhuma abstração de dados. No caso do PostgreSQL por exemplo, seria desenvolver usando o pacote pg, como já fizemos nesse outro tutorial.
  • ORM: a forma mais “comum” e mais produtiva de desenvolver. Nela, você lida apenas com objetos, o mais alto grau de abstração na programação, sem tocar em SQL. No entanto, a conversão constante de e para objetos torna esta a forma mais lenta em termos de performance. Um exemplo famoso é o Sequelize, que já usamos nesse outro tutorial.
  • Query Builder: nessa abordagem, usamos objetos para construção das queries, o que representa um grau médio de abstração, mas mais leve do que o presente nos ORMs, mas mais produtivo do que gerenciar tudo na mão como no driver nativo. Pode-se dizer que os Query Builders como o Knex.js são o meio termo entre performance e produtividade no mundo de desenvolvimento.

Entendido esse ponto inicial em relação às abordagens, vamos em frente.

#2 – Ambiente e Projeto

Se você nunca programou com Node e Postgre antes, vou deixar abaixo um vídeo ensinando a instalação do ambiente.

YouTube player

Quando estiver com o ambiente pronto, pode criar o banco e tabela para nossa aplicação.

Agora, crie uma pasta na sua máquina para o projeto, eu vou usar o nome “crud-knex-postgresql”. Abra o terminal e dentro dessa pasta rode um “npm init -y” para inicializar o projeto e criar o package.json.

Ainda no terminal, mande instalar as dependências que vamos precisar neste tutorial

A saber:

  • pg: pacote com o driver nativo para PostgreSQL;
  • Knex: pacote do query builder Knex.js;
  • DotEnv: pacote para gestão das variáveis de ambiente;

Outras opções de banco de dados possíveis seriam CockroachDB, MS SQL Server, MySQL, MariaDB, SQLite3, Better-SQLite3, Oracle e Amazon Redshift, bastando mudar o conector (pg).

E agora as dependências de desenvolvimento:

Sendo:

  • TypeScript: pacote para usarmos TypeScript no projeto;
  • TSX: pacote que permite executar TS direto, sem transpilar para JS;
  • @types/node: pacote para os types do Node.js nativo;

E depois inicialize o TypeScript no projeto.

E ajuste seu package.json para que o type do projeto seja module, ao invés de commonjs e o script de start.

Feito isso, agora crie um arquivo .env na raiz do seu projeto e dentro coloque as seguintes variáveis de ambiente, devidamente configuradas com os dados do servidor PostgreSQL que você vai usar.

  • NODE_ENV=development
  • DB_HOST=localhost
  • DB_PORT=5432
  • DB_USER=luiztools
  • DB_PASSWORD=
  • DB_DATABASE=luiztools
  • DEBUG=knex:query

A variável debug serve para o Knex imprimir no terminal o SQL que ele está executando no banco de dados, algo útil durante o desenvolvimento.

E com isso terminamos o setup inicial do projeto.

#3 – Configurando o Knex

O primeiro passo é criarmos uma pasta src na raiz do projeto e dentro dela uma pasta config, onde guardaremos arquivos de configuração. O primeiro arquivo de configuração que vamos precisar é o knex.ts, que como o próprio nome sugere, configura o query builder.

 import "dotenv/config";
import Knex from "knex";
 
const knex = Knex({
  client: "pg",
  connection: {
    host: `${process.env.DB_HOST}`,
    port: Number(process.env.DB_PORT),
    user: `${process.env.DB_USER}`,
    password: `${process.env.DB_PASSWORD}`,
    database: `${process.env.DB_DATABASE}`,
  },
  pool: {
    min: 2,
    max: 10,
  },
});
 
export const onDatabaseConnect = () => knex.raw("SELECT 1");
 
export default knex;

Começamos importando as variáveis de ambiente e depois o pacote do Knex. Como é comum em abstrações de banco de dados, primeiro precisamos apontar nosso query builder para o nosso banco (connection), bem como dizer qual o client de banco que vamos usar (pg) e as configurações de pool de conexões, algo opcional, mas recomendado para maior performance.

Após as configurações de conexão do Knex, eu crio e exporto uma função que testa a conexão. Se tudo estiver correto, essa função vai retornar uma linha com o número 1, caso contrário, um erro.

Por fim, exporto como default o objeto do Knex, devidamente conectado.

Agora vamos ao index.ts que deve existir dentro de src para escrever um código inicial que testa a conexão usando o Knex.