IMMUTABLE y STABLE en SQL
La volatilidad es una promesa al planificador sobre las llamadas repetidas.
-- Volatility is a promise to the planner about repeat calls.
CREATE FUNCTION card_fee(amount NUMERIC)
RETURNS NUMERIC
LANGUAGE SQL
IMMUTABLE -- same input, same answer, forever
RETURN round(amount * 0.029 + 0.30, 2);
CREATE FUNCTION todays_orders()
RETURNS BIGINT
LANGUAGE SQL
STABLE -- steady within one statement, not across time
BEGIN ATOMIC
SELECT COUNT(*)
FROM orders
WHERE placed_at > now() - INTERVAL '1 day';
END;
SELECT card_fee(413.45) AS fee, todays_orders() AS today;
Cómo funciona
IMMUTABLEjura que la comisión de un monto no cambia jamás: el resultado se puede reusar.STABLEpromete estabilidad dentro de una sentencia — lo justo para lecturas de tablas.- Etiquetar mal es un bug real: el planificador cachea lo que le dijiste que podía.
Palabras clave y builtins usados aquí
ASATOMICBEGINBIGINTCOUNTCREATEENDFROMFUNCTIONIMMUTABLEINTERVALLANGUAGENUMERICRETURNRETURNSSELECTSQLSTABLEWHERE
El intento, en números
- Líneas
- 18
- Caracteres a escribir
- 507
- Tokens
- 78
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 72 segundos.
Paso 4 de 4 en Funciones; paso 4 de 23 en Procedimientos almacenados de PostgreSQL.