aboutsummaryrefslogtreecommitdiff
path: root/doc/man/create_rule.l
diff options
context:
space:
mode:
Diffstat (limited to 'doc/man/create_rule.l')
-rw-r--r--doc/man/create_rule.l221
1 files changed, 0 insertions, 221 deletions
diff --git a/doc/man/create_rule.l b/doc/man/create_rule.l
deleted file mode 100644
index 86bc53e8221..00000000000
--- a/doc/man/create_rule.l
+++ /dev/null
@@ -1,221 +0,0 @@
-.\" This is -*-nroff-*-
-.\" XXX standard disclaimer belongs here....
-.\" $Header: /cvsroot/pgsql/doc/man/Attic/create_rule.l,v 1.1.1.1 1996/08/18 22:14:21 scrappy Exp $
-.TH "CREATE RULE" SQL 11/05/95 Postgres95 Postgres95
-.SH NAME
-create rule \(em 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]
- [action | nothing | \fB[\fPactions...\fB]\fP]
-.fi
-.SH DESCRIPTION
-.IR "The current rule system implementation is very brittle and is unstable. Users are discouraged from using rules at this time."
-.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 either:
-.nf
-a class name
- \fIor\fR
-class.column
-.fi
-The
-.BR "from"
-clause, the
-.BR "where"
-clause, and the
-.IR action
-are respectively normal SQL
-.BR "from"
-clauses,
-.BR "where"
-clauses and collections of SQL commands with the following change:
-.IP
-.BR new
-or
-.BR current
-can appear instead of
-an instance variable whenever an instance
-variable is permissible in SQL.
-.PP
-The semantics of a rule is that at the time an individual instance is
-accessed, updated, inserted or deleted, there is a
-.BR current
-instance
-(for retrieves, updates and deletes) and a
-.BR new
-instance (for updates and appends). If the event specified in the
-.BR "on"
-clause and the condition specified in the
-.BR "where"
-clause are true for the current instance, then the
-.IR action
-part of the rule is executed. First, however, values from fields in
-the current instance and/or the new instance are substituted for:
-.nf
-current.attribute-name
-new.attribute-name
-.fi
-The
-.IR action
-part of the rule executes with same command and transaction identifier
-as the user command that caused activation.
-.PP
-A note of caution about SQL rules is in order. If the same class
-name or instance variable appears in the event,
-.BR where
-clause and the
-.IR action
-parts of a rule, they are all considered different tuple variables.
-More accurately,
-.BR new
-and
-.BR current
-are the only tuple variables that are shared between these clauses.
-For example, the following two rules have the same semantics:
-.nf
-on update to EMP.salary where EMP.name = "Joe"
- do update EMP ( ... ) where ...
-
-on update to EMP-1.salary where EMP-2.name = "Joe"
- do update EMP-3 ( ... ) where ...
-.fi
-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
-When choosing between the rewrite and instance rule systems for a
-particular rule application, remember that in the rewrite system
-.BR current
-refers to a relation and some qualifiers whereas in the instance
-system it refers to an instance (tuple).
-.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 retrieve
-command will cause
-Postgres to
-.IR crash :
-.nf
---
---Example of a circular rewrite rule combination.
---
-create rule bad_rule_combination_1 is
- on select to EMP
- do instead select to TOYEMP
-
-create rule bad_rule_combination_2 is
- on select to TOYEMP
- do instead select to EMP
-
---
---This attempt to retrieve from EMP will cause Postgres to crash.
---
-select * from EMP
-.fi
-.PP
-You must have
-.IR "rule definition"
-access to a class in order to define a rule on it (see
-.IR "change acl" (l).
-.SH EXAMPLES
-.nf
---
---Make Sam get the same salary adjustment as Joe
---
-create rule example_1 is
- on update EMP.salary where current.name = "Joe"
- do update EMP (salary = new.salary)
- where EMP.name = "Sam"
-.fi
-At the time Joe receives a salary adjustment, the event will become
-true and Joe's current 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 subsequently executed. This propagates
-Joe's salary on to Sam.
-.nf
---
---Make Bill get Joe's salary when it is accessed
---
-create rule example_2 is
- on select to EMP.salary
- where current.name = "Bill"
- do instead
- select (EMP.salary) from EMP where EMP.name = "Joe"
-.fi
-.nf
---
---Deny Joe access to the salary of employees in the shoe
---department. (pg_username() returns the name of the current user)
---
-create rule example_3 is
- on select to EMP.salary
- where current.dept = "shoe"
- and pg_username() = "Joe"
- do instead nothing
-.fi
-.nf
---
---Create a view of the employees working in the toy department.
---
-create TOYEMP(name = char16, salary = int4)
-
-create rule example_4 is
- on select to TOYEMP
- do instead select (EMP.name, EMP.salary) from EMP
- where EMP.dept = "toy"
-.fi
-.nf
---
---All new employees must make 5,000 or less
---
-create rule example_5 is
- on insert to EMP where new.salary > 5000
- do update newset salary = 5000
-.fi
-.SH "SEE ALSO"
-drop rule(l),
-create view(l).
-.SH BUGS
-.PP
-.BR "instead"
-rules do not work properly.
-.PP
-The object in a SQL rule cannot be an array reference and cannot
-have parameters.
-.PP
-Aside from the \*(lqoid\*(rq field, system attributes cannot be
-referenced anywhere in a rule. Among other things, this means that
-functions of instances (e.g., \*(lqfoo(emp)\*(rq where \*(lqemp\*(rq
-is a class) cannot be called anywhere in a rule.
-.PP
-The rule system store the rule text and query plans as text
-attributes. This implies that creation of rules may fail if the
-rule plus its various internal representations exceed some value
-that is on the order of one page (8KB).