Conceptos básicos de funciones
9 ejemplos para empezar con las funciones de PostgreSQL: 6 básicos y 3 intermedios.
Busca en todas las páginas de la documentación
9 ejemplos para empezar con las funciones de PostgreSQL: 6 básicos y 3 intermedios.
CREATE en el esquema app.
# Desarrollo local con Docker (PostgreSQL 18)
docker run -d --name pg18 -e POSTGRES_PASSWORD=dev -p 5432:5432 postgres:18
psql postgres://postgres:dev@localhost:5432/postgresCuerpo de una única expresión 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;
$$;Variables y 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;
$$;Usar en SELECT y WHERE.
SELECT id, app.account_order_count(id) AS orders FROM app.accounts;Forma de función que devuelve un 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;
$$;Las funciones puras permiten expresiones de índice.
CREATE OR REPLACE FUNCTION app.norm_email(e text)
RETURNS text
LANGUAGE sql
IMMUTABLE
AS $$ SELECT lower(trim(e)); $$;CREATE OR REPLACE actualiza el cuerpo.
CREATE OR REPLACE FUNCTION app.norm_email(e text) RETURNS text
LANGUAGE sql IMMUTABLE AS $$ SELECT lower(trim(e)); $$;Los procedimientos permiten el control de transacciones (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();El valor predeterminado se ejecuta como el llamador.
ALTER FUNCTION app.account_order_count(bigint) SECURITY INVOKER;Refuerce las funciones privilegiadas.
CREATE OR REPLACE FUNCTION app.admin_stat()
RETURNS int LANGUAGE sql SECURITY DEFINER
SET search_path = pg_catalog, pg_temp
AS $$ SELECT 1; $$;Versiones de la pila: Esta página se escribió para PostgreSQL 18.4 (estable 18, mantenimiento 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x y PostGIS 3.5+.
Revisado por Chris St. John·Última actualización: 16 jul 2026