typestar

audit_triggers.sql en SQL

Una auditoría de precios que la aplicación no puede olvidar: la escribe un trigger.

-- An audit trail: every price change recorded by a trigger, automatically.
CREATE TABLE price_audit (
    id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
    sku TEXT NOT NULL,
    old_price NUMERIC(10, 2),
    new_price NUMERIC(10, 2),
    changed_at TIMESTAMPTZ NOT NULL DEFAULT now()
);

CREATE FUNCTION log_price_change()
RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN
    IF NEW.price <> OLD.price THEN
        INSERT INTO price_audit (sku, old_price, new_price)
        VALUES (OLD.sku, OLD.price, NEW.price);
    END IF;
    RETURN NEW;
END;
$$;

CREATE TRIGGER price_history
AFTER UPDATE ON products
FOR EACH ROW
EXECUTE FUNCTION log_price_change();

-- Two real changes and one stock-only touch; only the changes land.
UPDATE products
SET price = 1999.00
WHERE sku = 'KAYAK-17';

UPDATE products
SET price = 279.00
WHERE sku = 'PADDLE-C';

UPDATE products
SET stock = stock + 5
WHERE sku = 'DRYBAG-20';

SELECT sku, old_price, new_price
FROM price_audit
ORDER BY id;

Cómo funciona

  1. La tabla price_audit y log_price_change() capturan precio viejo y nuevo.
  2. La guarda IF NEW.price <> OLD.price salta las escrituras que tocan otras columnas.
  3. Tres updates dejan dos filas de auditoría; la consulta final lee la historia.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
43
Caracteres a escribir
931
Tokens
172
Ritmo de tres estrellas
65 tpm

Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 159 segundos.

Ronda más rápida

  1. 🇺🇸 brendancol37 tpm

Escribe este fragmento

Paso 1 de 3 en Bis; paso 21 de 23 en Procedimientos almacenados de PostgreSQL.

← Anterior Siguiente →