SQL

قیدهای NOT VALID و triggerهای غیرفعال: نگهبان‌های خوابیده

فهرست می‌کنه قیدهای CHECK/FK رو که با NOT VALID ساخته شدن (و هیچ‌وقت دوباره اعتبارسنجی نشدن) و triggerهای غیرفعال رو: قواعد کسب‌وکاری که دیتابیس دیگه اعمالشون نمی‌کنه.

کاربرد

بعد از یه مهاجرت «سریع»: پیدا کردن اعتبارسنجی‌هایی که عقب انداخته شدن و ماه‌ها فراموش شدن.

پیش‌نیازها

PostgreSQL (pg_constraint, pg_trigger)

SQL
SELECT
    'constraint' AS type_objet,
    con.conrelid::regclass::text AS table_name,
    con.conname AS nom,
    'NOT VALID — données existantes jamais vérifiées' AS probleme
FROM pg_constraint con
WHERE NOT con.convalidated
  AND con.contype IN ('c', 'f')

UNION ALL

SELECT
    'trigger',
    tg.tgrelid::regclass::text,
    tg.tgname,
    'désactivé (tgenabled = D)'
FROM pg_trigger tg
WHERE tg.tgenabled = 'D'
  AND NOT tg.tgisinternal
ORDER BY type_objet, table_name;

نتیجه

 type_objet | table_name  |           nom            |                    probleme
------------+-------------+--------------------------+-------------------------------------------------
 constraint | invoices    | fk_invoices_customer     | NOT VALID — données existantes jamais vérifiées
 constraint | order_lines | chk_qty_positive         | NOT VALID — données existantes jamais vérifiées
 trigger    | customers   | trg_audit_customers      | désactivé (tgenabled = D)
 trigger    | stock       | trg_stock_recalc         | désactivé (tgenabled = D)
(4 rows)

Remède : ALTER TABLE ... VALIDATE CONSTRAINT / ALTER TABLE ... ENABLE TRIGGER
SQLAuditContraintesTriggers

اسنیپت‌های مرتبط

بازگشت به آزمایشگاه داده