खोज…


परिचय

ट्रिगर निर्दिष्ट तालिका या दृश्य के साथ जुड़ा होगा और कुछ घटनाओं के होने पर निर्दिष्ट फ़ंक्शन function_name को निष्पादित करेगा।

टिप्पणियों

कृपया पूर्ण अवलोकन के लिए नीचे दिए गए लिंक का उपयोग करें:

बेसिक PL / pgSQL ट्रिगर फंक्शन

यह एक सरल ट्रिगर फ़ंक्शन है।

CREATE OR REPLACE FUNCTION my_simple_trigger_function()
RETURNS trigger AS
$BODY$

BEGIN
    -- TG_TABLE_NAME :name of the table that caused the trigger invocation
IF (TG_TABLE_NAME = 'users') THEN

    --TG_OP : operation the trigger was fired
  IF (TG_OP = 'INSERT') THEN 
    --NEW.id is holding the new database row value (in here id is the id column in users table)
    --NEW will return null for DELETE operations
    INSERT INTO log_table (date_and_time, description) VALUES (now(), 'New user inserted. User ID: '|| NEW.id);        
    RETURN NEW;        

  ELSIF (TG_OP = 'DELETE') THEN    
    --OLD.id is holding the old database row value (in here id is the id column in users table)
    --OLD will return null for INSERT operations
    INSERT INTO log_table (date_and_time, description) VALUES (now(), 'User deleted.. User ID: ' || OLD.id);
    RETURN OLD;        
    
  END IF;

RETURN null;
END IF;

END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

users तालिका में इस ट्रिगर फ़ंक्शन को जोड़ना

CREATE TRIGGER my_trigger
AFTER INSERT OR DELETE
ON users
FOR EACH ROW
EXECUTE PROCEDURE my_simple_trigger_function();

ट्रिगर्स का प्रकार

ट्रिगर को आग में निर्दिष्ट किया जा सकता है:

  • BEFORE ही एक पंक्ति में ऑपरेशन का प्रयास किया जाता है - सम्मिलित करें, अपडेट करें या हटाएं;
  • ऑपरेशन पूरा होने के AFTER - सम्मिलित करें, अपडेट करें या हटाएं;
  • किसी दृश्य पर आवेषण, अद्यतन या हटाए जाने के मामले में ऑपरेशन का INSTEAD OF

चिह्नित किया गया ट्रिगर:

  • FOR EACH ROW लिए एक बार FOR EACH ROW लिए कहा जाता है जो ऑपरेशन को संशोधित करता है;
  • किसी भी ऑपरेशन के FOR EACH STATEMENT को ऑनड कहा जाता है।

उदाहरणों को निष्पादित करने की तैयारी

CREATE TABLE company (
    id          SERIAL PRIMARY KEY NOT NULL,
    name        TEXT NOT NULL,
    created_at  TIMESTAMP,
    modified_at TIMESTAMP DEFAULT NOW()
)

CREATE TABLE log (
    id          SERIAL PRIMARY KEY NOT NULL,
    table_name  TEXT NOT NULL,
    table_id    TEXT NOT NULL,
    description TEXT NOT NULL,
    created_at  TIMESTAMP DEFAULT NOW()
)

एकल आवेषण ट्रिगर

चरण 1: अपना फ़ंक्शन बनाएं

CREATE OR REPLACE FUNCTION add_created_at_function()
  RETURNS trigger AS $BODY$
BEGIN
  NEW.created_at := NOW();
  RETURN NEW;
END $BODY$
LANGUAGE plpgsql;

चरण 2: अपना ट्रिगर बनाएं

CREATE TRIGGER add_created_at_trigger
BEFORE INSERT
ON company
FOR EACH ROW
EXECUTE PROCEDURE add_created_at_function();

चरण 3: इसका परीक्षण करें

INSERT INTO company (name) VALUES ('My company');
SELECT * FROM company;

एकाधिक उद्देश्य के लिए ट्रिगर

चरण 1: अपना फ़ंक्शन बनाएं

CREATE OR REPLACE FUNCTION add_log_function()
  RETURNS trigger AS $BODY$
DECLARE
  vDescription TEXT;
  vId INT;
  vReturn RECORD;
BEGIN
    vDescription := TG_TABLE_NAME || ' ';
     IF (TG_OP = 'INSERT') THEN
        vId := NEW.id;
        vDescription := vDescription || 'added. Id: ' || vId;
        vReturn := NEW;
    ELSIF (TG_OP = 'UPDATE') THEN
        vId := NEW.id;
        vDescription := vDescription || 'updated. Id: ' || vId;
        vReturn := NEW;
    ELSIF (TG_OP = 'DELETE') THEN
        vId := OLD.id;
        vDescription := vDescription || 'deleted. Id: ' || vId;
        vReturn := OLD;
    END IF;

    RAISE NOTICE 'TRIGER called on % - Log: %', TG_TABLE_NAME, vDescription;

    INSERT INTO log 
        (table_name, table_id, description, created_at) 
        VALUES
        (TG_TABLE_NAME, vId, vDescription, NOW());

    RETURN vReturn;
END $BODY$
  LANGUAGE plpgsql;

चरण 2: अपना ट्रिगर बनाएं

CREATE TRIGGER add_log_trigger
AFTER INSERT OR UPDATE OR DELETE
ON company
FOR EACH ROW
EXECUTE PROCEDURE add_log_function();

चरण 3: इसका परीक्षण करें

INSERT INTO company (name) VALUES ('Company 1');
INSERT INTO company (name) VALUES ('Company 2');
INSERT INTO company (name) VALUES ('Company 3');
UPDATE company SET name='Company new 2' WHERE name='Company 2';
DELETE FROM company WHERE name='Company 1';
SELECT * FROM log;


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow