Noções Básicas de Tipos de Dados
10 exemplos para você começar com os tipos de dados 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 tipos de dados do PostgreSQL - 7 básicos e 3 intermediários.
Conectado ao PostgreSQL 18 com privilégio CREATE em um esquema de rascunho.
# 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/postgresbigint para IDs; int para contagens; smallint para enums como inteiros.
CREATE TABLE app.counts (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
score int NOT NULL CHECK (score BETWEEN 0 AND 100)
);bigint evita overflow de int em IDs do SnowflakeCHECK impõe o intervalo sem validação apenas no aplicativotext vs varchartext não tem penalidade de desempenho em relação a varchar(n) no PostgreSQL.
CREATE TABLE app.labels (
code text NOT NULL UNIQUE,
title text NOT NULL
);varchar(n) quando o padrão exigir comprimento máximotext é o padrão para strings arbitráriasTrês valores se for anulável; prefira NOT NULL com padrão.
ALTER TABLE app.customers ADD COLUMN is_active boolean NOT NULL DEFAULT true;NULL signifique desconhecidois_active = truenumeric para Dinheironumeric(p,s) para aritmética decimal exata.
CREATE TABLE app.payments (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
amount numeric(12,2) NOT NULL CHECK (amount >= 0)
);float para moedaSUM e AVG permanecem exatostimestamptzArmazene instantes em UTC.
CREATE TABLE app.events (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
occurred_at timestamptz NOT NULL DEFAULT now()
);Session TimeZone afeta apenas a exibiçãotimestamp without time zone para eventos reaisbtree em occurred_atUUIDTipo uuid com gen_random_uuid().
CREATE EXTENSION IF NOT EXISTS pgcrypto;
CREATE TABLE app.tokens (
id uuid PRIMARY KEY DEFAULT gen_random_uuid()
);uuidv7 na camada do aplicativo para ordem de tempoUUID de textojsonbJSON binário com operadores de indexação.
CREATE TABLE app.profiles (
user_id bigint PRIMARY KEY,
attrs jsonb NOT NULL DEFAULT '{}'::jsonb
);
INSERT INTO app.profiles VALUES (1, '{"tier":"pro"}');jsonb remove chaves duplicadas e decompõeEnumConjunto fechado de rótulos armazenados como OIDs.
CREATE TYPE app.plan_tier AS ENUM ('free','pro','enterprise');
ALTER TABLE app.customers ADD COLUMN tier app.plan_tier NOT NULL DEFAULT 'free';Arrays do Postgres para tags (use com cuidado).
ALTER TABLE app.customers ADD COLUMN tags text[] NOT NULL DEFAULT '{}';
CREATE INDEX customers_tags_gin ON app.customers USING gin (tags);@>CHECK reutilizável em um tipo base.
CREATE DOMAIN app.email AS text
CHECK (VALUE ~* '^[^@]+@[^@]+\.[^@]+$');
ALTER TABLE app.customers ALTER COLUMN email TYPE app.email USING email::app.email;NOT NULL e UNIQUEVersões da Pilha: 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