Add some notes about conditional rules used with views.
This commit is contained in:
parent
f688c1e064
commit
4a3bf197eb
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_rule.sgml,v 1.28 2001/10/09 18:46:00 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_rule.sgml,v 1.29 2001/11/06 23:54:32 tgl Exp $
|
||||||
Postgres documentation
|
Postgres documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -196,10 +196,10 @@ CREATE
|
|||||||
|
|
||||||
<refsect2 id="R2-SQL-CREATERULE-3">
|
<refsect2 id="R2-SQL-CREATERULE-3">
|
||||||
<refsect2info>
|
<refsect2info>
|
||||||
<date>2001-01-05</date>
|
<date>2001-11-06</date>
|
||||||
</refsect2info>
|
</refsect2info>
|
||||||
<title>
|
<title>
|
||||||
Notes
|
Rules and Views
|
||||||
</title>
|
</title>
|
||||||
<para>
|
<para>
|
||||||
Presently, ON SELECT rules must be unconditional INSTEAD rules and must
|
Presently, ON SELECT rules must be unconditional INSTEAD rules and must
|
||||||
@ -207,10 +207,44 @@ CREATE
|
|||||||
rule effectively turns the object table into a view, whose visible
|
rule effectively turns the object table into a view, whose visible
|
||||||
contents are the rows returned by the rule's SELECT query rather than
|
contents are the rows returned by the rule's SELECT query rather than
|
||||||
whatever had been stored in the table (if anything). It is considered
|
whatever had been stored in the table (if anything). It is considered
|
||||||
better style to write a CREATE VIEW command than to create a table and
|
better style to write a CREATE VIEW command than to create a real table
|
||||||
define an ON SELECT rule for it.
|
and define an ON SELECT rule for it.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<xref linkend="sql-createview"> creates a dummy table (with no underlying
|
||||||
|
storage) and associates an ON SELECT rule with it. The system will not
|
||||||
|
allow updates to the view, since it knows there is no real table there.
|
||||||
|
You can create the
|
||||||
|
illusion of an updatable view by defining ON INSERT, ON UPDATE, and
|
||||||
|
ON DELETE rules (or any subset of those that's sufficient
|
||||||
|
for your purposes) to replace update actions on the view with
|
||||||
|
appropriate updates on other tables.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
There is a catch if you try to use conditional
|
||||||
|
rules for view updates: there <emphasis>must</> be an unconditional
|
||||||
|
INSTEAD rule for each action you wish to allow on the view. If the
|
||||||
|
rule is conditional, or is not INSTEAD, then the system will still reject
|
||||||
|
attempts to perform the update action, because it thinks it might end up
|
||||||
|
trying to perform the action on the dummy table in some cases.
|
||||||
|
If you want to
|
||||||
|
handle all the useful cases in conditional rules, you can; just add an
|
||||||
|
unconditional DO INSTEAD NOTHING rule to ensure that the system
|
||||||
|
understands it will never be called on to update the dummy table. Then
|
||||||
|
make the conditional rules non-INSTEAD; in the cases where they fire,
|
||||||
|
they add to the default INSTEAD NOTHING action.
|
||||||
|
</para>
|
||||||
|
</refsect2>
|
||||||
|
|
||||||
|
<refsect2 id="R2-SQL-CREATERULE-4">
|
||||||
|
<refsect2info>
|
||||||
|
<date>2001-01-05</date>
|
||||||
|
</refsect2info>
|
||||||
|
<title>
|
||||||
|
Notes
|
||||||
|
</title>
|
||||||
<para>
|
<para>
|
||||||
You must have rule definition access to a table in order
|
You must have rule definition access to a table in order
|
||||||
to define a rule on it. Use <command>GRANT</command>
|
to define a rule on it. Use <command>GRANT</command>
|
||||||
@ -267,7 +301,7 @@ UPDATE mytable SET name = 'foo' WHERE id = 42;
|
|||||||
Compatibility
|
Compatibility
|
||||||
</title>
|
</title>
|
||||||
|
|
||||||
<refsect2 id="R2-SQL-CREATERULE-4">
|
<refsect2 id="R2-SQL-CREATERULE-5">
|
||||||
<refsect2info>
|
<refsect2info>
|
||||||
<date>1998-09-11</date>
|
<date>1998-09-11</date>
|
||||||
</refsect2info>
|
</refsect2info>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_view.sgml,v 1.12 2001/09/03 12:57:49 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_view.sgml,v 1.13 2001/11/06 23:54:32 tgl Exp $
|
||||||
Postgres documentation
|
Postgres documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -102,7 +102,7 @@ ERROR: Relation '<replaceable class="parameter">view</replaceable>' already exi
|
|||||||
</varlistentry>
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><computeroutput>
|
<term><computeroutput>
|
||||||
NOTICE create: attribute named "<replaceable class="parameter">column</replaceable>" has an unknown type
|
NOTICE: Attribute '<replaceable class="parameter">column</replaceable>' has an unknown type
|
||||||
</computeroutput></term>
|
</computeroutput></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
@ -149,7 +149,11 @@ CREATE VIEW vista AS SELECT text 'Hello World'
|
|||||||
</title>
|
</title>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Currently, views are read only.
|
Currently, views are read only: the system will not allow an insert,
|
||||||
|
update, or delete on a view. You can get the effect of an updatable
|
||||||
|
view by creating rules that rewrite inserts, etc. on the view into
|
||||||
|
appropriate actions on other tables. For more information see
|
||||||
|
<xref linkend="sql-createrule">.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user