CREATE TRIGGER
  
  SQL - Language Statements
 
 
  
   CREATE TRIGGER
  
  
   Creates a new trigger
  
 
 
  
   2000-03-25
  
  
CREATE TRIGGER name { BEFORE | AFTER } { event [OR ...] }
    ON table FOR EACH { ROW | STATEMENT }
    EXECUTE PROCEDURE func ( arguments )
  
  
  
   
    1998-09-21
   
   
    Inputs
   
   
    
     
      name
      
       
	The name of an existing trigger.
       
      
     
     
      table
      
       
	The name of a table.
       
      
     
     
      event
      
       
	One of INSERT, DELETE or UPDATE.
       
      
     
     
      func
      
       
	A user-supplied function.
       
      
     
    
   
  
  
   
    1998-09-21
   
   
    Outputs
   
   
    
     
      
CREATE
       
      
       
	This message is returned if the trigger is successfully created.
       
      
     
    
   
  
 
 
 
  
   1998-09-21
  
  
   Description
  
  
   CREATE TRIGGER will enter a new trigger into the current
   data base.  The trigger will be associated with the relation
   table and will execute
   the specified function func.
  
  
   The trigger can be specified to  fire  either  before BEFORE the
   operation is attempted on a tuple (before constraints
   are checked and the INSERT, UPDATE or
   DELETE is attempted)  or
   AFTER  the  operation  has been attempted (e.g., after constraints
   are checked and the INSERT,
   UPDATE or DELETE has
   completed). If the
   trigger fires before the event, the trigger may
   skip the operation for the current tuple, or change the tuple
   being  inserted  (for  INSERT and
   UPDATE operations only).  If
   the trigger fires after the event,  all  changes,  including  the
   last insertion, update, or deletion, are "visible" to the trigger.
  
  
   Refer to the chapters on SPI and Triggers in the
   PostgreSQL Programmer's Guide  for  more
   information.
  
  
   
    1998-09-21
   
   
    Notes
   
   
    CREATE TRIGGER is a Postgres
    language extension.
   
   
    Only the relation owner may create a trigger on this relation.
   
   
    As of the current release (v7.0), STATEMENT triggers are not implemented.
   
   
    Refer to DROP TRIGGER for information on how to 
    remove triggers.
      
  
 
 
  
   Usage
  
  
   Check if the specified distributor code exists in the distributors
   table before appending or updating a row in the table films:
   
CREATE TRIGGER if_dist_exists
    BEFORE INSERT OR UPDATE ON films FOR EACH ROW
    EXECUTE PROCEDURE check_primary_key ('did', 'distributors', 'did');
   
  
  
   Before cancelling a distributor or updating its code, remove every
   reference to the table films:
   
CREATE TRIGGER if_film_exists 
    BEFORE DELETE OR UPDATE ON distributors FOR EACH ROW
    EXECUTE PROCEDURE check_foreign_key (1, 'CASCADE', 'did', 'films', 'did');
   
  
 
 
  
   Compatibility
  
  
  
   
    1998-09-21
   
   
    SQL92
   
   
    There is no CREATE TRIGGER in SQL92.
   
   
    The second example above may also be done by using a FOREIGN KEY
    constraint as in:
    
CREATE TABLE distributors (
    did      DECIMAL(3),
    name     VARCHAR(40),
    CONSTRAINT if_film_exists
    FOREIGN KEY(did) REFERENCES films
    ON UPDATE CASCADE ON DELETE CASCADE  
);