• Jan Wieck's avatar
    Changes pg_trigger and extend pg_rewrite in order to allow triggers and · 0fe16500
    Jan Wieck authored
    rules to be defined with different, per session controllable, behaviors
    for replication purposes.
    
    This will allow replication systems like Slony-I and, as has been stated
    on pgsql-hackers, other products to control the firing mechanism of
    triggers and rewrite rules without modifying the system catalog directly.
    
    The firing mechanisms are controlled by a new superuser-only GUC
    variable, session_replication_role, together with a change to
    pg_trigger.tgenabled and a new column pg_rewrite.ev_enabled. Both
    columns are a single char data type now (tgenabled was a bool before).
    The possible values in these attributes are:
    
         'O' - Trigger/Rule fires when session_replication_role is "origin"
               (default) or "local". This is the default behavior.
    
         'D' - Trigger/Rule is disabled and fires never
    
         'A' - Trigger/Rule fires always regardless of the setting of
               session_replication_role
    
         'R' - Trigger/Rule fires when session_replication_role is "replica"
    
    The GUC variable can only be changed as long as the system does not have
    any cached query plans. This will prevent changing the session role and
    accidentally executing stored procedures or functions that have plans
    cached that expand to the wrong query set due to differences in the rule
    firing semantics.
    
    The SQL syntax for changing a triggers/rules firing semantics is
    
         ALTER TABLE <tabname> <when> TRIGGER|RULE <name>;
    
         <when> ::= ENABLE | ENABLE ALWAYS | ENABLE REPLICA | DISABLE
    
    psql's \d command as well as pg_dump are extended in a backward
    compatible fashion.
    
    Jan
    0fe16500
rewriteDefine.h 1.15 KB