This option is only allowed for an AFTER trigger that is not a constraint trigger also, if the trigger is an UPDATE trigger, it must not specify a column_name list. This feature lets the trigger see a global view of what the statement did, not just one row at a time. The REFERENCING option enables collection of transition relations, which are row sets that include all of the rows inserted, deleted, or modified by the current SQL statement. Constraint triggers are expected to raise an exception when the constraints they implement are violated. A pending deferred-trigger firing can also be forced to happen immediately by using SET CONSTRAINTS. They can be fired either at the end of the statement causing the triggering event, or at the end of the containing transaction in the latter case they are said to be deferred. Constraint triggers must be AFTER ROW triggers on plain tables (not foreign tables). This is the same as a regular trigger except that the timing of the trigger firing can be adjusted using SET CONSTRAINTS. When the CONSTRAINT option is specified, this command creates a constraint trigger. If multiple triggers of the same kind are defined for the same event, they will be fired in alphabetical order by name. Statement-level triggers can also have WHEN conditions, although the feature is not so useful for them since the condition cannot refer to any values in the table. In row-level triggers the WHEN condition can examine the old and/or new values of columns of the row. The following table summarizes which types of triggers may be used on tables, views, and foreign tables:Īlso, a trigger definition can specify a Boolean WHEN condition, which will be tested to see whether the trigger should be fired. In addition, triggers may be defined to fire for TRUNCATE, though only FOR EACH STATEMENT. BEFORE and AFTER triggers on a view must be marked as FOR EACH STATEMENT. Triggers that are specified to fire INSTEAD OF the trigger event must be marked FOR EACH ROW, and can only be defined on views. In contrast, a trigger that is marked FOR EACH STATEMENT only executes once for any given operation, regardless of how many rows it modifies (in particular, an operation that modifies zero rows will still result in the execution of any applicable FOR EACH STATEMENT triggers). For example, a DELETE that affects 10 rows will cause any ON DELETE triggers on the target relation to be called 10 separate times, once for each deleted row. If the trigger fires after the event, all changes, including the effects of other triggers, are “ visible” to the trigger.Ī trigger that is marked FOR EACH ROW is called once for every row that the operation modifies. If the trigger fires before or instead of the event, the trigger can skip the operation for the current row, or change the row being inserted (for INSERT and UPDATE operations only). The trigger can be specified to fire before the operation is attempted on a row (before constraints are checked and the INSERT, UPDATE, or DELETE is attempted) or after the operation has completed (after constraints are checked and the INSERT, UPDATE, or DELETE has completed) or instead of the operation (in the case of inserts, updates or deletes on a view). To replace the current definition of an existing trigger, use CREATE OR REPLACE TRIGGER, specifying the existing trigger's name and parent table. The trigger will be associated with the specified table, view, or foreign table and will execute the specified function function_name when certain operations are performed on that table. CREATE OR REPLACE TRIGGER will either create a new trigger, or replace an existing trigger.
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |