aboutsummaryrefslogtreecommitdiff
path: root/src/man/create_rule.l
diff options
context:
space:
mode:
Diffstat (limited to 'src/man/create_rule.l')
-rw-r--r--src/man/create_rule.l175
1 files changed, 0 insertions, 175 deletions
diff --git a/src/man/create_rule.l b/src/man/create_rule.l
deleted file mode 100644
index 67cc2f26073..00000000000
--- a/src/man/create_rule.l
+++ /dev/null
@@ -1,175 +0,0 @@
-.\" This is -*-nroff-*-
-.\" XXX standard disclaimer belongs here....
-.\" $Header: /cvsroot/pgsql/src/man/Attic/create_rule.l,v 1.11 1999/02/07 22:10:09 wieck Exp $
-.TH "CREATE RULE" SQL 11/05/95 PostgreSQL PostgreSQL
-.SH NAME
-create rule - define a new rule
-.SH SYNOPSIS
-.nf
-\fBcreate\fR \fBrule\fR rule_name
- \fBas\fR \fBon\fR event
- \fBto\fR object [\fBwhere\fR clause]
- \fBdo\fR [\fBinstead\fR]
- [\fBnothing\fP | action | \fB(\fPactions...\fB)\fP]
-.fi
-.SH DESCRIPTION
-.PP
-.BR "Create rule"
-is used to define a new rule.
-.PP
-Here,
-.IR event
-is one of
-.IR select ,
-.IR update ,
-.IR delete
-or
-.IR insert .
-.IR Object
-is a class name.
-.PP
-The
-.BR "where"
-clause, and the
-.IR action
-are respectively normal SQL
-.BR "where"
-clauses and collections of SQL commands with the following change:
-.IP
-.BR new
-or
-.BR old
-can appear instead of
-an instance variable whenever an instance
-variable is permissible in SQL.
-.PP
-Since v6.4 rules on
-.IR select
-are restricted to build
-.BR views .
-.BR "Create view"
-should be used instead.
-.PP
-The semantics of a rule is that at the time an individual instance is
-updated, inserted or deleted, there is an
-.BR old
-instance
-(for updates and deletes) and a
-.BR new
-instance (for updates and inserts). If the event specified in the
-.BR "on"
-clause and the condition specified in the
-.BR "where"
-clause are true, then the
-.IR action
-part of the rule is executed. First, however, values from fields in
-the old instance and/or the new instance are substituted for:
-.nf
-old.attribute-name
-new.attribute-name
-.fi
-The
-.IR action
-part of the rule executes with same transaction identifier
-before the user command that caused activation.
-.PP
-Each rule can have the optional tag
-.BR "instead" .
-Without this tag
-.IR action
-will be performed in addition to the user command when the event in
-the condition part of the rule occurs. Alternately, the
-.IR action
-part will be done instead of the user command.
-In this later case, the action can be the keyword
-.BR nothing .
-.PP
-It is very important to note that the
-.BR rewrite
-rule system will
-neither detect nor process circular
-rules. For example, though each of the following two rule
-definitions are accepted by Postgres, the
-.IR update
-command to one of the classes will cause
-Postgres to abort the transaction during the attempt to apply rules.
-.nf
-
---
---Example of a circular rewrite rule combination.
---
-create rule bad_rule_combination_1 as
- on update to EMP
- do update TOY set ...;
-
-create rule bad_rule_combination_2 as
- on update to TOY
- do update EMP set ...;
-
-.fi
-.PP
-You must have
-.IR "rule definition"
-access to a class in order to define a rule on it.
-.PP
-In contrast to queries run by trigger procedures,
-the rule actions are executed under the permissions of the owner
-of the
-.BR event
-class. Thus, if the owner of a class defines a rule that inserts something
-into another one (like in the log example below), the user updating the
-.BR event
-class must not have
-.IR insert
-permissions for the class specified in the
-.BR "rule actions" .
-This technique can safely be used to deny users from modifying event logging.
-.SH EXAMPLES
-.nf
-
---
---Make Sam get the same salary adjustment as Joe
---
-create rule example_1 as
- on update to EMP where old.name = "Joe"
- do update EMP set salary = new.salary
- where EMP.name = "Sam";
-
-.fi
-At the time Joe receives a salary adjustment, the event will become
-true and Joe's old instance and proposed new instance are available
-to the execution routines. Hence, his new salary is substituted into the
-.IR action
-part of the rule which is executed. This propagates
-Joe's salary on to Sam.
-.nf
-
---
--- Log changes to salary
---
-create rule example_2 as
- on insert to EMP
- do insert into EMP_LOG (name, newsal, when)
- values (new.name, new.salary, 'now'::text);
-
-create rule example_3 as
- on update to EMP where old.salary != new.salary
- do insert into EMP_LOG (name, oldsal, newsal, when)
- values (old.name, old.salary, new.salary, 'now'::text);
-
-create rule example_4 as
- on delete to EMP
- do insert into EMP_LOG (name, oldsal, when)
- values (old.name, old.salary, 'now'::text);
-
-.fi
-.SH "SEE ALSO"
-drop_rule(l),
-create_view(l),
-create_trigger(l).
-.SH BUGS
-.PP
-The rule system stores the rule definition as query plans into text
-attributes. This implies that creation of rules may fail if the
-rule in its internal representations exceed some value
-that is on the order of one page (8KB).