Noções Básicas de Funções
9 exemplos para você começar com funções PostgreSQL - 6 básicas e 3 intermediárias.
Busque em todas as páginas da documentação
9 exemplos para você começar com funções PostgreSQL - 6 básicas e 3 intermediárias.
CREATE no schema app.
# 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/postgresCorpo de uma única expressão SELECT.
CREATE OR REPLACE FUNCTION app.account_order_count(p_account_id bigint)
RETURNS bigint
LANGUAGE sql
STABLE
AS $$
SELECT count(*) FROM app.orders WHERE account_id = p_account_id;
$$;Variáveis e IF/LOOP.
CREATE OR REPLACE FUNCTION app.is_vip(p_account_id bigint)
RETURNS boolean
LANGUAGE plpgsql
STABLE
AS $$
DECLARE v_total numeric;
BEGIN
SELECT coalesce(sum(total),0) INTO v_total FROM app.orders WHERE account_id = p_account_id;
RETURN v_total > 10000;
END;
$$;Use em SELECT e WHERE.
SELECT id, app.account_order_count(id) AS orders FROM app.accounts;Formato de função que retorna um conjunto.
CREATE OR REPLACE FUNCTION app.big_orders(p_min numeric)
RETURNS TABLE (order_id bigint, total numeric)
LANGUAGE sql
STABLE
AS $$
SELECT id, total FROM app.orders WHERE total >= p_min;
$$;Funções puras habilitam expressões de índice.
CREATE OR REPLACE FUNCTION app.norm_email(e text)
RETURNS text
LANGUAGE sql
IMMUTABLE
AS $$ SELECT lower(trim(e)); $$;CREATE OR REPLACE atualiza o corpo.
CREATE OR REPLACE FUNCTION app.norm_email(e text) RETURNS text
LANGUAGE sql IMMUTABLE AS $$ SELECT lower(trim(e)); $$;Procedimentos permitem controle de transação (CALL).
CREATE OR REPLACE PROCEDURE app.archive_old_orders()
LANGUAGE plpgsql
AS $$
BEGIN
DELETE FROM app.orders WHERE created_at < now() - interval '2 years';
END;
$$;
CALL app.archive_old_orders();O padrão executa como o chamador.
ALTER FUNCTION app.account_order_count(bigint) SECURITY INVOKER;Proteja funções privilegiadas.
CREATE OR REPLACE FUNCTION app.admin_stat()
RETURNS int LANGUAGE sql SECURITY DEFINER
SET search_path = pg_catalog, pg_temp
AS $$ SELECT 1; $$;Versões da Pilha: Esta página foi escrita para PostgreSQL 18.4 (stable 18, maintenance 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