96 / 100

DROP TRIGGER

Trigirni o'chirish

Ushbu qo'llanmada PostgreSQLda jadvalga biriktirilgan trigirni ma'lumotlar bazasidan butunlay o'chirish uchun DROP TRIGGER buyrug'idan qanday foydalanishni o'rganasiz.

PostgreSQL DROP TRIGGER buyrug'iga kirish

DROP TRIGGER buyrug'i ko'rsatilgan jadvaldan trigirni o'chirib tashlaydi.

DROP TRIGGER buyrug'ining sintaksisi:

query.sql
DROP TRIGGER [IF EXISTS] trigger_name
ON table_name
[CASCADE | RESTRICT];

Sintaksis tushuntirishi:

  • trigger_name — o'chirilishi kerak bo'lgan trigir nomi.
  • IF EXISTS — trigir mavjud bo'lmasa, xatolik chiqarmasdan ogohlantirish beradi.
  • ON table_name — trigir biriktirilgan jadval nomi (ko'rsatilishi shart).
  • CASCADE — ushbu trigirga bog'liq barcha ob'ektlarni avtomatik o'chiradi.
  • RESTRICT (sukut bo'yicha) — agar bog'liq ob'ektlar bo'lsa, o'chirishni rad etadi.

DROP TRIGGER amaliy misoli

Avval ombordagi tovar qoldig'i manfiy bo'lib ketishini taqiqlovchi trigir yaratamiz:

1) Trigir funksiyasi va trigirni yaratish

query.sql
DROP TABLE IF EXISTS inventories CASCADE;

CREATE TABLE inventories (
    product_id INT NOT NULL,
    warehouse_id INT NOT NULL,
    quantity INT NOT NULL,
    PRIMARY KEY (product_id, warehouse_id)
);

CREATE OR REPLACE FUNCTION prevent_negative_stock()
RETURNS TRIGGER 
AS 
$$
BEGIN
    IF (TG_OP = 'UPDATE' AND NEW.quantity < 0) THEN
        RAISE EXCEPTION 'Ombordagi tovar qoldig''i manfiy bo''lishi mumkin emas: ombor_id=%, tovar_id=%',
            NEW.warehouse_id, NEW.product_id;
    END IF;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER inventory_stock_check 
BEFORE UPDATE ON inventories 
FOR EACH ROW
EXECUTE FUNCTION prevent_negative_stock();

2) Trigirni o'chirish

Endi inventory_stock_check trigirini inventories jadvalidan o'chiramiz:

query.sql
DROP TRIGGER IF EXISTS inventory_stock_check ON inventories;

Trigir muvaffaqiyatli o'chirildi.

[!NOTE] DROP TRIGGER faqat trigirning o'zini o'chiradi, lekin unga tegishli bo'lgan funksiya (prevent_negative_stock) ma'lumotlar bazasida saqlanib qoladi. Agar funksiyani ham butunlay yo'qotmoqchi bo'lsangiz, alohida DROP FUNCTION prevent_negative_stock; buyrug'ini berishingiz kerak.

Xulosa

  • DROP TRIGGER trigger_name ON table_name buyrug'i jadvaldan trigirni olib tashlaydi.
  • ON table_name ko'rsatilishi majburiydir, chunki bitta nomli trigirlar turli jadvallarda bo'lishi mumkin.
  • Trigir o'chirilganda uning trigir funksiyasi avtomatik o'chmaydi.