Doc: update CREATE RULE ref page's hoary discussion of views.
This text left one with the impression that an ON SELECT rule could be attached to a plain table, which has not been true since commit 264c06820 (meaning the text was already misleading when written, evidently by me in 96bd67f61). However, it didn't get really bad until b23cd185f removed the convert-a-table-to-a-view logic, which had made it possible for scripts that thought they were attaching ON SELECTs to tables to still work. Rewrite into a form that makes it clear that an ON SELECT rule is better regarded as an implementation detail of a view. Pre-v16, point out that adding ON SELECT to a table actually converts it to a view. Per bug #18178 from Joshua Uyehara. Back-patch to all supported branches. Discussion: https://postgr.es/m/18178-05534d7064044d2d@postgresql.org
This commit is contained in:
parent
a8510a7d96
commit
95a610b097
@ -59,15 +59,16 @@ CREATE [ OR REPLACE ] RULE <replaceable class="parameter">name</replaceable> AS
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Presently, <literal>ON SELECT</literal> rules must be unconditional
|
Presently, <literal>ON SELECT</literal> rules can only be attached
|
||||||
<literal>INSTEAD</literal> rules and must have actions that consist
|
to views. Such a rule must be named <literal>"_RETURN"</literal>,
|
||||||
of a single <command>SELECT</command> command. Thus, an
|
must be an unconditional <literal>INSTEAD</literal> rule, and must have
|
||||||
<literal>ON SELECT</literal> rule effectively turns the table into
|
an action that consists of a single <command>SELECT</command> command.
|
||||||
a view, whose visible contents are the rows returned by the rule's
|
This command defines the visible contents of the view. (The view
|
||||||
<command>SELECT</command> command rather than whatever had been
|
itself is basically a dummy table with no storage.) It's best to
|
||||||
stored in the table (if anything). It is considered better style
|
regard such a rule as an implementation detail. While a view can be
|
||||||
to write a <command>CREATE VIEW</command> command than to create a
|
redefined via <literal>CREATE OR REPLACE RULE "_RETURN" AS
|
||||||
real table and define an <literal>ON SELECT</literal> rule for it.
|
...</literal>, it's better style to use <literal>CREATE OR REPLACE
|
||||||
|
VIEW</literal>.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user