Noções Básicas de PostgreSQL
10 exemplos para você começar com os fundamentos do PostgreSQL - 7 básicos e 3 intermediários.
Busque em todas as páginas da documentação
10 exemplos para você começar com os fundamentos do PostgreSQL - 7 básicos e 3 intermediários.
Instale o PostgreSQL 18 localmente ou use Docker. Você precisa do psql e acesso de superusuário para criar objetos de exemplo.
# Desenvolvimento local com Docker (PostgreSQL 18)
docker run -d --name pg18 -e POSTGRES_PASSWORD=dev -p 5432:5432 postgres:18
psql postgres://postgres:dev@localhost:5432/postgresCada sessão se conecta a exatamente um banco de dados no cluster.
\c postgres
SELECT current_database(), current_user, version();\c nome_db no psql muda de banco de dados sem reconectar o cliente binárioversion() retorna a build do servidor; fixe as ferramentas cliente na mesma versão principal quando possívelRelacionado: Arquitetura do Postgres - processos por trás da conexão
Schemas agrupam tabelas, views e funções. public é o schema padrão.
CREATE SCHEMA app AUTHORIZATION postgres;
CREATE TABLE app.customers (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
email text NOT NULL UNIQUE,
created_at timestamptz NOT NULL DEFAULT now()
);
INSERT INTO app.customers (email) VALUES ('ada@example.com');serial para novas tabelas (PostgreSQL 10+)SQL legível lista colunas e filtra cedo.
SELECT id, email, created_at
FROM app.customers
WHERE email LIKE '%@example.com'
ORDER BY created_at DESC
LIMIT 10;SELECT * em código de aplicativo; mudanças de schema quebram clientes silenciosamenteLIMIT sem ORDER BY retorna um conjunto de linhas arbitrárioRelacionado: Noções Básicas de Consultas SQL
Catálogos do sistema descrevem cada objeto no cluster.
SELECT n.nspname AS schema, c.relname AS table_name, c.relkind
FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE n.nspname = 'app' AND c.relkind = 'r'
ORDER BY 1, 2;pg_class + pg_namespace são o registro de tabelas de baixo nívelinformation_schema oferece views padrão SQL com menos detalhesRelacionado: Catálogos do Sistema
Transações ACID agrupam mudanças em uma única unidade atômica.
BEGIN;
INSERT INTO app.customers (email) VALUES ('grace@example.com');
UPDATE app.customers SET email = lower(email) WHERE email = 'grace@example.com';
COMMIT;BEGINROLLBACK desfaz o trabalho na transação atualRelacionado: Noções Básicas de Transações
Índices B-tree aceleram predicados de igualdade e intervalo em colunas.
CREATE INDEX customers_created_at_idx
ON app.customers (created_at DESC);
EXPLAIN (ANALYZE, BUFFERS)
SELECT id FROM app.customers
WHERE created_at > now() - interval '7 days';EXPLAIN ANALYZE executa a consulta e mostra os tempos reaisRelacionado: Noções Básicas de Índices
Extensões fornecem recursos opcionais como módulos controlados.
CREATE EXTENSION IF NOT EXISTS pgcrypto;
SELECT gen_random_uuid();pg_extensionCREATE no banco de dadosNomes não qualificados são resolvidos via search_path. Configuração incorreta causa bugs de tabela errada.
SHOW search_path;
SET search_path = app, public;
SELECT email FROM customers LIMIT 1;
-- Mais seguro em aplicativos: sempre qualifique o schema
SELECT email FROM app.customers LIMIT 1;"$user", public - schemas vazios podem surpreender novas rolespublic para dados multi-tenant sem RLSRelacionado: Banco de Dados, Schema e Search Path
Consultas rápidas ao catálogo expõem conexões, dicas de bloat e versão.
SELECT count(*) AS backends FROM pg_stat_activity;
SELECT datname, numbackends, xact_commit, blks_read
FROM pg_stat_database
WHERE datname = current_database();pg_stat_activity lista sessões ativas e eventos de esperapg_stat_database agrega commits, leituras e conflitos por banco de dadosRelacionado: Arquitetura do Postgres
Armazene instantes em UTC; converta na borda do aplicativo.
ALTER TABLE app.customers
ADD COLUMN last_login_at timestamptz;
UPDATE app.customers
SET last_login_at = now()
WHERE email = 'ada@example.com';
SELECT email, last_login_at AT TIME ZONE 'America/New_York' AS login_ny
FROM app.customers;timestamptz armazena UTC internamente; a exibição depende do TimeZone da sessãotimestamp without time zone para tempos de eventos do mundo realRelacionado: Data, Hora e Timestamptz
Versões da Stack: Esta página foi escrita para PostgreSQL 18.4 (estável 18, manutenção 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x e PostGIS 3.5+.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026