Pular para o conteúdo

Tipos de Dados

O PetraDB segue as convencoes do PostgreSQL para sintaxe SQL, tratamento de identificadores e conversao de tipos.

  • Palavras-chave insensíveis a maiusculasSELECT, select e Select sao equivalentes
  • Conversao de identificadores nao cotados — identificadores nao cotados sao convertidos para minusculas (CREATE TABLE Users -> nome da tabela users)
  • Identificadores com aspas duplas — preservam maiusculas/minusculas ("MixedCase" permanece como esta)
  • Escape de strings — aspas simples duplicadas ('it''s') e E-strings (E'it\'s')
  • Operadores — tanto != quanto <> para diferente
TipoDescricao
SMALLINTInteiro de 16 bits (-32768 a 32767)
INT / INTEGERInteiro de 32 bits
BIGINTInteiro de 64 bits
SMALLSERIALInteiro de 16 bits auto-incremento (cria sequencia auxiliar)
SERIALInteiro de 32 bits auto-incremento (cria sequencia auxiliar)
BIGSERIALInteiro de 64 bits auto-incremento (cria sequencia auxiliar)
DOUBLE / FLOAT / REALPonto flutuante de dupla precisao
NUMERIC(p,s) / DECIMAL(p,s)Decimal de precisao fixa
TEXTString de comprimento variavel
CHAR(n)String de comprimento fixo (preenchida com espacos a direita)
VARCHAR(n)String de comprimento variavel (maximo n caracteres, sem preenchimento)
BOOLEANVerdadeiro/falso
DATEData do calendario (yyyy-MM-dd)
TIMEHora do dia (HH:mm:ss)
TIMESTAMPData e hora
TIMESTAMP WITH TIME ZONEData e hora com deslocamento de fuso horario
INTERVALDuracao (ISO 8601 ou N days N hours N minutes N seconds)
UUIDIdentificador unico universal
JSON / JSONBObjetos e arrays JSON estruturados
BYTEADados binarios
ENUMTipos enumerados personalizados (via CREATE TYPE ... AS ENUM)
INT[], TEXT[], etc.Arrays tipados (qualquer tipo base com sufixo [])

Use o operador :: ou CAST(expr AS type) para converter entre tipos:

SELECT '2024-06-15'::DATE;
SELECT CAST('14:30:00' AS TIME);
SELECT '2 hours 30 minutes'::INTERVAL;
SELECT CAST(val AS TEXT);
SELECT '42'::INT;
SELECT 1::BOOLEAN;
SELECT EXTRACT(year FROM created_at);
SELECT '2024-01-01'::DATE + 10; -- adicionar dias
SELECT '2024-01-15'::DATE - '2024-01-10'::DATE; -- dias entre
SELECT now() + '2 hours'::INTERVAL; -- timestamp + intervalo
SELECT now() - '30 minutes'::INTERVAL; -- timestamp - intervalo
SELECT '1 hour'::INTERVAL * 3; -- escalar intervalo
SELECT EXTRACT(year FROM now()); -- extrair campo
SELECT date_trunc('month', now()); -- truncar
PRIMARY KEY (id)
UNIQUE (email)
NOT NULL
DEFAULT value
FOREIGN KEY (col) REFERENCES other_table (col) ON DELETE CASCADE ON UPDATE CASCADE