加入rule相关语法
This commit is contained in:
@ -42,6 +42,7 @@ Complete list of usable sgml source files in this directory.
|
||||
<!ENTITY alterUser SYSTEM "alter_user.sgml">
|
||||
<!ENTITY alterUserMapping SYSTEM "alter_user_mapping.sgml">
|
||||
<!ENTITY alterView SYSTEM "alter_view.sgml">
|
||||
<!ENTITY alterRule SYSTEM "alter_rule.sgml">
|
||||
<!ENTITY analyze SYSTEM "analyze.sgml">
|
||||
<!ENTITY begin SYSTEM "begin.sgml">
|
||||
<!## XC>
|
||||
|
||||
16
doc/src/sgml/ref/alter_rule.sgmlin
Normal file
16
doc/src/sgml/ref/alter_rule.sgmlin
Normal file
@ -0,0 +1,16 @@
|
||||
<refentry id="SQL-ALTER_RULE">
|
||||
<refmeta>
|
||||
<refentrytitle>ALTER RULE</refentrytitle>
|
||||
<manvolnum>7</manvolnum>
|
||||
<refmiscinfo>SQL - Language Statements</refmiscinfo>
|
||||
</refmeta>
|
||||
<refnamediv>
|
||||
<refname>ALTER RULE</refname>
|
||||
<refpurpose>change the definition of a rule</refpurpose>
|
||||
</refnamediv>
|
||||
<refsynopsisdiv>
|
||||
<synopsis>
|
||||
ALTER RULE name ON table_name RENAME TO new_name
|
||||
</synopsis>
|
||||
</refsynopsisdiv>
|
||||
</refentry>
|
||||
@ -1,96 +1,101 @@
|
||||
<refentry id="SQL-ALTER_TABLE">
|
||||
<refmeta>
|
||||
<refentrytitle>ALTER TABLE</refentrytitle>
|
||||
<manvolnum>7</manvolnum>
|
||||
<refmiscinfo>SQL - Language Statements</refmiscinfo>
|
||||
</refmeta>
|
||||
<refnamediv>
|
||||
<refname>ALTER TABLE</refname>
|
||||
<refpurpose>change the definition of a table</refpurpose>
|
||||
</refnamediv>
|
||||
<refsynopsisdiv>
|
||||
<synopsis>
|
||||
ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )}
|
||||
action [, ... ];
|
||||
ALTER TABLE [ IF EXISTS ] table_name
|
||||
ADD ( { column_name data_type [ compress_mode ] [ COLLATE collation ] [ column_constraint [ ... ] ]} [, ...] );
|
||||
ALTER TABLE [ IF EXISTS ] table_name
|
||||
MODIFY ( { column_name data_type | column_name [ CONSTRAINT constraint_name ] NOT NULL [ ENABLE ] | column_name [ CONSTRAINT constraint_name ] NULL } [, ...] );
|
||||
ALTER TABLE [ IF EXISTS ] table_name
|
||||
RENAME TO new_table_name;
|
||||
ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )}
|
||||
RENAME [ COLUMN ] column_name TO new_column_name;
|
||||
ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )}
|
||||
RENAME CONSTRAINT constraint_name TO new_constraint_name;
|
||||
ALTER TABLE [ IF EXISTS ] table_name
|
||||
SET SCHEMA new_schema;
|
||||
|
||||
where action can be:
|
||||
column_clause
|
||||
| ADD table_constraint [ NOT VALID ]
|
||||
| ADD table_constraint_using_index
|
||||
| VALIDATE CONSTRAINT constraint_name
|
||||
| DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ]
|
||||
| CLUSTER ON index_name
|
||||
| SET WITHOUT CLUSTER
|
||||
| SET ( {storage_parameter = value} [, ... ] )
|
||||
| RESET ( storage_parameter [, ... ] )
|
||||
| OWNER TO new_owner
|
||||
| SET TABLESPACE new_tablespace
|
||||
| SET {COMPRESS|NOCOMPRESS}
|
||||
| TO { GROUP groupname | NODE ( nodename [, ... ] ) }
|
||||
| ADD NODE ( nodename [, ... ] )
|
||||
| DELETE NODE ( nodename [, ... ] )
|
||||
| DISABLE TRIGGER [ trigger_name | ALL | USER ]
|
||||
| ENABLE TRIGGER [ trigger_name | ALL | USER ]
|
||||
| ENABLE REPLICA TRIGGER trigger_name
|
||||
| ENABLE ALWAYS TRIGGER trigger_name
|
||||
| ENABLE ROW LEVEL SECURITY
|
||||
| DISABLE ROW LEVEL SECURITY
|
||||
| FORCE ROW LEVEL SECURITY
|
||||
| NO FORCE ROW LEVEL SECURITY
|
||||
where column_clause can be:
|
||||
ADD [ COLUMN ] column_name data_type [ compress_mode ] [ COLLATE collation ] [ column_constraint [ ... ] ]
|
||||
| MODIFY column_name data_type
|
||||
| MODIFY column_name [ CONSTRAINT constraint_name ] NOT NULL [ ENABLE ]
|
||||
| MODIFY column_name [ CONSTRAINT constraint_name ] NULL
|
||||
| DROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ]
|
||||
| ALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type [ COLLATE collation ] [ USING expression ]
|
||||
| ALTER [ COLUMN ] column_name { SET DEFAULT expression | DROP DEFAULT }
|
||||
| ALTER [ COLUMN ] column_name { SET | DROP } NOT NULL
|
||||
| ALTER [ COLUMN ] column_name SET STATISTICS [PERCENT] integer
|
||||
| ADD STATISTICS (( column_1_name, column_2_name [, ...] ))
|
||||
| DELETE STATISTICS (( column_1_name, column_2_name [, ...] ))
|
||||
| ALTER [ COLUMN ] column_name SET ( {attribute_option = value} [, ... ] )
|
||||
| ALTER [ COLUMN ] column_name RESET ( attribute_option [, ... ] )
|
||||
| ALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN }
|
||||
where column_constraint can be:
|
||||
[ CONSTRAINT constraint_name ]
|
||||
{ NOT NULL |
|
||||
NULL |
|
||||
CHECK ( expression ) |
|
||||
DEFAULT default_expr |
|
||||
UNIQUE index_parameters |
|
||||
PRIMARY KEY index_parameters }
|
||||
[ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
|
||||
where compress_mode can be:
|
||||
{ DELTA | PREFIX | DICTIONARY | NUMSTR | NOCOMPRESS }
|
||||
where table_constraint can be:
|
||||
[ CONSTRAINT constraint_name ]
|
||||
{ CHECK ( expression ) |
|
||||
UNIQUE ( column_name [, ... ] ) index_parameters |
|
||||
PRIMARY KEY ( column_name [, ... ] ) index_parameters |
|
||||
PARTIAL CLUSTER KEY ( column_name [, ... ] ) |
|
||||
FOREIGN KEY ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn [, ... ] ) ]
|
||||
[ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON UPDATE action ] }
|
||||
[ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
|
||||
where index_parameters can be:
|
||||
[ WITH ( {storage_parameter = value} [, ... ] ) ]
|
||||
[ USING INDEX TABLESPACE tablespace_name ]
|
||||
where table_constraint_using_index can be:
|
||||
[ CONSTRAINT constraint_name ]
|
||||
{ UNIQUE | PRIMARY KEY } USING INDEX index_name
|
||||
[ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
|
||||
</synopsis>
|
||||
</refsynopsisdiv>
|
||||
</refentry>
|
||||
<refentry id="SQL-ALTER_TABLE">
|
||||
<refmeta>
|
||||
<refentrytitle>ALTER TABLE</refentrytitle>
|
||||
<manvolnum>7</manvolnum>
|
||||
<refmiscinfo>SQL - Language Statements</refmiscinfo>
|
||||
</refmeta>
|
||||
<refnamediv>
|
||||
<refname>ALTER TABLE</refname>
|
||||
<refpurpose>change the definition of a table</refpurpose>
|
||||
</refnamediv>
|
||||
<refsynopsisdiv>
|
||||
<synopsis>
|
||||
ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )}
|
||||
action [, ... ];
|
||||
ALTER TABLE [ IF EXISTS ] table_name
|
||||
ADD ( { column_name data_type [ compress_mode ] [ COLLATE collation ] [ column_constraint [ ... ] ]} [, ...] );
|
||||
ALTER TABLE [ IF EXISTS ] table_name
|
||||
MODIFY ( { column_name data_type | column_name [ CONSTRAINT constraint_name ] NOT NULL [ ENABLE ] | column_name [ CONSTRAINT constraint_name ] NULL } [, ...] );
|
||||
ALTER TABLE [ IF EXISTS ] table_name
|
||||
RENAME TO new_table_name;
|
||||
ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )}
|
||||
RENAME [ COLUMN ] column_name TO new_column_name;
|
||||
ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )}
|
||||
RENAME CONSTRAINT constraint_name TO new_constraint_name;
|
||||
ALTER TABLE [ IF EXISTS ] table_name
|
||||
SET SCHEMA new_schema;
|
||||
|
||||
where action can be:
|
||||
column_clause
|
||||
| ADD table_constraint [ NOT VALID ]
|
||||
| ADD table_constraint_using_index
|
||||
| VALIDATE CONSTRAINT constraint_name
|
||||
| DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ]
|
||||
| CLUSTER ON index_name
|
||||
| SET WITHOUT CLUSTER
|
||||
| SET ( {storage_parameter = value} [, ... ] )
|
||||
| RESET ( storage_parameter [, ... ] )
|
||||
| OWNER TO new_owner
|
||||
| SET TABLESPACE new_tablespace
|
||||
| SET {COMPRESS|NOCOMPRESS}
|
||||
| TO { GROUP groupname | NODE ( nodename [, ... ] ) }
|
||||
| ADD NODE ( nodename [, ... ] )
|
||||
| DELETE NODE ( nodename [, ... ] )
|
||||
| DISABLE TRIGGER [ trigger_name | ALL | USER ]
|
||||
| ENABLE TRIGGER [ trigger_name | ALL | USER ]
|
||||
| ENABLE REPLICA TRIGGER trigger_name
|
||||
| ENABLE ALWAYS TRIGGER trigger_name
|
||||
| DISABLE RULE rewrite_rule_name
|
||||
| ENABLE RULE rewrite_rule_name
|
||||
| ENABLE REPLICA RULE rewrite_rule_name
|
||||
| ENABLE ALWAYS RULE rewrite_rule_name
|
||||
| ENABLE ROW LEVEL SECURITY
|
||||
| DISABLE ROW LEVEL SECURITY
|
||||
| FORCE ROW LEVEL SECURITY
|
||||
| NO FORCE ROW LEVEL SECURITY
|
||||
| REPLICA IDENTITY {DEFAULT | USING INDEX index_name | FULL | NOTHING}
|
||||
where column_clause can be:
|
||||
ADD [ COLUMN ] column_name data_type [ compress_mode ] [ COLLATE collation ] [ column_constraint [ ... ] ]
|
||||
| MODIFY column_name data_type
|
||||
| MODIFY column_name [ CONSTRAINT constraint_name ] NOT NULL [ ENABLE ]
|
||||
| MODIFY column_name [ CONSTRAINT constraint_name ] NULL
|
||||
| DROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ]
|
||||
| ALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type [ COLLATE collation ] [ USING expression ]
|
||||
| ALTER [ COLUMN ] column_name { SET DEFAULT expression | DROP DEFAULT }
|
||||
| ALTER [ COLUMN ] column_name { SET | DROP } NOT NULL
|
||||
| ALTER [ COLUMN ] column_name SET STATISTICS [PERCENT] integer
|
||||
| ADD STATISTICS (( column_1_name, column_2_name [, ...] ))
|
||||
| DELETE STATISTICS (( column_1_name, column_2_name [, ...] ))
|
||||
| ALTER [ COLUMN ] column_name SET ( {attribute_option = value} [, ... ] )
|
||||
| ALTER [ COLUMN ] column_name RESET ( attribute_option [, ... ] )
|
||||
| ALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN }
|
||||
where column_constraint can be:
|
||||
[ CONSTRAINT constraint_name ]
|
||||
{ NOT NULL |
|
||||
NULL |
|
||||
CHECK ( expression ) |
|
||||
DEFAULT default_expr |
|
||||
UNIQUE index_parameters |
|
||||
PRIMARY KEY index_parameters }
|
||||
[ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
|
||||
where compress_mode can be:
|
||||
{ DELTA | PREFIX | DICTIONARY | NUMSTR | NOCOMPRESS }
|
||||
where table_constraint can be:
|
||||
[ CONSTRAINT constraint_name ]
|
||||
{ CHECK ( expression ) |
|
||||
UNIQUE ( column_name [, ... ] ) index_parameters |
|
||||
PRIMARY KEY ( column_name [, ... ] ) index_parameters |
|
||||
PARTIAL CLUSTER KEY ( column_name [, ... ] ) |
|
||||
FOREIGN KEY ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn [, ... ] ) ]
|
||||
[ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON UPDATE action ] }
|
||||
[ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
|
||||
where index_parameters can be:
|
||||
[ WITH ( {storage_parameter = value} [, ... ] ) ]
|
||||
[ USING INDEX TABLESPACE tablespace_name ]
|
||||
where table_constraint_using_index can be:
|
||||
[ CONSTRAINT constraint_name ]
|
||||
{ UNIQUE | PRIMARY KEY } USING INDEX index_name
|
||||
[ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
|
||||
</synopsis>
|
||||
</refsynopsisdiv>
|
||||
</refentry>
|
||||
|
||||
23
doc/src/sgml/ref/create_rule.sgmlin
Normal file
23
doc/src/sgml/ref/create_rule.sgmlin
Normal file
@ -0,0 +1,23 @@
|
||||
<refentry id="SQL-CREATE_RULE">
|
||||
<refmeta>
|
||||
<refentrytitle>ALTER TABLE</refentrytitle>
|
||||
<manvolnum>7</manvolnum>
|
||||
<refmiscinfo>SQL - Language Statements</refmiscinfo>
|
||||
</refmeta>
|
||||
<refnamediv>
|
||||
<refname>CREATE RULE</refname>
|
||||
<refpurpose>define a new rewrite rule</refpurpose>
|
||||
</refnamediv>
|
||||
<refsynopsisdiv>
|
||||
<synopsis>
|
||||
CREATE [ OR REPLACE ] RULE name AS ON event
|
||||
TO table_name [ WHERE condition ]
|
||||
DO [ ALSO | INSTEAD ] { NOTHING | command | ( command ; command ... ) }
|
||||
|
||||
where event can be one of:
|
||||
|
||||
SELECT | INSERT | UPDATE | DELETE
|
||||
|
||||
</synopsis>
|
||||
</refsynopsisdiv>
|
||||
</refentry>
|
||||
16
doc/src/sgml/ref/drop_rule.sgmlin
Normal file
16
doc/src/sgml/ref/drop_rule.sgmlin
Normal file
@ -0,0 +1,16 @@
|
||||
<refentry id="SQL-DROP_RULE">
|
||||
<refmeta>
|
||||
<refentrytitle>ALTER TABLE</refentrytitle>
|
||||
<manvolnum>7</manvolnum>
|
||||
<refmiscinfo>SQL - Language Statements</refmiscinfo>
|
||||
</refmeta>
|
||||
<refnamediv>
|
||||
<refname>DROP RULE</refname>
|
||||
<refpurpose>remove a rewrite rule</refpurpose>
|
||||
</refnamediv>
|
||||
<refsynopsisdiv>
|
||||
<synopsis>
|
||||
DROP RULE [ IF EXISTS ] name ON table_name [ CASCADE | RESTRICT ]
|
||||
</synopsis>
|
||||
</refsynopsisdiv>
|
||||
</refentry>
|
||||
@ -2373,7 +2373,7 @@ static List* RewriteQuery(Query* parsetree, List* rewrite_events)
|
||||
#ifdef PGXC
|
||||
List* product_queries = NIL;
|
||||
|
||||
if (IS_PGXC_COORDINATOR)
|
||||
if (IS_SINGLE_NODE || IS_PGXC_COORDINATOR)
|
||||
#else
|
||||
List* product_queries;
|
||||
#endif
|
||||
|
||||
@ -41,10 +41,15 @@ column_clause
|
||||
| ENABLE TRIGGER [ trigger_name | ALL | USER ]
|
||||
| ENABLE REPLICA TRIGGER trigger_name
|
||||
| ENABLE ALWAYS TRIGGER trigger_name
|
||||
| DISABLE RULE rewrite_rule_name
|
||||
| ENABLE RULE rewrite_rule_name
|
||||
| ENABLE REPLICA RULE rewrite_rule_name
|
||||
| ENABLE ALWAYS RULE rewrite_rule_name
|
||||
| ENABLE ROW LEVEL SECURITY
|
||||
| DISABLE ROW LEVEL SECURITY
|
||||
| FORCE ROW LEVEL SECURITY
|
||||
| NO FORCE ROW LEVEL SECURITY
|
||||
| REPLICA IDENTITY {DEFAULT | USING INDEX index_name | FULL | NOTHING}
|
||||
where column_clause can be:
|
||||
ADD [ COLUMN ] column_name data_type [ compress_mode ] [ COLLATE collation ] [ column_constraint [ ... ] ]
|
||||
| MODIFY column_name data_type
|
||||
|
||||
@ -488,24 +488,21 @@ create rule def_view_test_ins as
|
||||
on insert to def_view_test
|
||||
do instead insert into def_test select new.*;
|
||||
insert into def_view_test default values;
|
||||
ERROR: cannot insert into view "def_view_test"
|
||||
HINT: You need an unconditional ON INSERT DO INSTEAD rule or an INSTEAD OF INSERT trigger.
|
||||
alter table def_view_test alter column c1 set default 45;
|
||||
insert into def_view_test default values;
|
||||
ERROR: cannot insert into view "def_view_test"
|
||||
HINT: You need an unconditional ON INSERT DO INSTEAD rule or an INSTEAD OF INSERT trigger.
|
||||
alter table def_view_test alter column c2 set default 'view_default';
|
||||
insert into def_view_test default values;
|
||||
ERROR: cannot insert into view "def_view_test"
|
||||
HINT: You need an unconditional ON INSERT DO INSTEAD rule or an INSTEAD OF INSERT trigger.
|
||||
select * from def_view_test order by 1, 2;
|
||||
c1 | c2
|
||||
----+-----------------
|
||||
5 | initial_default
|
||||
10 | new_default
|
||||
45 | view_default
|
||||
45 |
|
||||
| initial_default
|
||||
|
|
||||
(4 rows)
|
||||
|
|
||||
(7 rows)
|
||||
|
||||
drop rule def_view_test_ins on def_view_test;
|
||||
drop view def_view_test;
|
||||
|
||||
@ -828,9 +828,11 @@ select * from tt order by 1, 2;
|
||||
-- note that nextval() gets executed a second time in the rule expansion,
|
||||
-- which is expected.
|
||||
select * from tt_log order by 1, 2;
|
||||
f1 | data
|
||||
----+------
|
||||
(0 rows)
|
||||
f1 | data
|
||||
----+---------
|
||||
| barlog
|
||||
| foollog
|
||||
(2 rows)
|
||||
|
||||
-- test case for a whole-row-variable bug
|
||||
create function foo1(n integer, out a text, out b text)
|
||||
|
||||
@ -422,12 +422,11 @@ create rule shipped_view_insert as on insert to shipped_view do instead
|
||||
insert into parts (partnum, cost) values (1, 1234.56);
|
||||
insert into shipped_view (ordnum, partnum, value)
|
||||
values (0, 1, (select cost from parts where partnum = '1'));
|
||||
ERROR: cannot insert into view "shipped_view"
|
||||
HINT: You need an unconditional ON INSERT DO INSTEAD rule or an INSTEAD OF INSERT trigger.
|
||||
select * from shipped_view;
|
||||
ttype | ordnum | partnum | value
|
||||
-------+--------+---------+-------
|
||||
(0 rows)
|
||||
ttype | ordnum | partnum | value
|
||||
-------+--------+---------+---------
|
||||
wt | 0 | 1 | 1234.56
|
||||
(1 row)
|
||||
|
||||
create rule shipped_view_update as on update to shipped_view do instead
|
||||
update shipped set partnum = new.partnum, value = new.value
|
||||
@ -436,12 +435,11 @@ update shipped_view set value = 11
|
||||
from int4_tbl a join int4_tbl b
|
||||
on (a.f1 = (select f1 from int4_tbl c where c.f1=b.f1))
|
||||
where ordnum = a.f1;
|
||||
ERROR: cannot update view "shipped_view"
|
||||
HINT: You need an unconditional ON UPDATE DO INSTEAD rule or an INSTEAD OF UPDATE trigger.
|
||||
select * from shipped_view;
|
||||
ttype | ordnum | partnum | value
|
||||
-------+--------+---------+-------
|
||||
(0 rows)
|
||||
wt | 0 | 1 | 11
|
||||
(1 row)
|
||||
|
||||
select f1, ss1 as relabel from
|
||||
(select *, (select sum(f1) from int4_tbl b where f1 >= a.f1) as ss1
|
||||
|
||||
@ -1462,6 +1462,12 @@ WITH t AS (
|
||||
)
|
||||
SELECT * FROM t;
|
||||
a
|
||||
----
|
||||
42
|
||||
(1 row)
|
||||
|
||||
SELECT * FROM y order by 1;
|
||||
a
|
||||
----
|
||||
0
|
||||
1
|
||||
@ -1470,19 +1476,15 @@ SELECT * FROM t;
|
||||
4
|
||||
5
|
||||
6
|
||||
11
|
||||
7
|
||||
12
|
||||
8
|
||||
13
|
||||
9
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
(14 rows)
|
||||
|
||||
SELECT * FROM y order by 1;
|
||||
a
|
||||
---
|
||||
(0 rows)
|
||||
42
|
||||
(15 rows)
|
||||
|
||||
DROP RULE y_rule ON y;
|
||||
-- check merging of outer CTE with CTE in a rule action
|
||||
@ -1514,18 +1516,21 @@ WITH t1 AS ( DELETE FROM bug6051 RETURNING * )
|
||||
INSERT INTO bug6051 SELECT * FROM t1;
|
||||
SELECT * FROM bug6051 ORDER BY 1;
|
||||
i
|
||||
---
|
||||
(0 rows)
|
||||
|
||||
SELECT * FROM bug6051_2 ORDER BY 1;
|
||||
i
|
||||
---
|
||||
1
|
||||
2
|
||||
3
|
||||
(3 rows)
|
||||
|
||||
SELECT * FROM bug6051_2 ORDER BY 1;
|
||||
i
|
||||
---
|
||||
(0 rows)
|
||||
|
||||
-- a truly recursive CTE in the same list
|
||||
DROP TABLE y;
|
||||
CREATE TABLE y (a INTEGER PRIMARY KEY INITIALLY DEFERRED);
|
||||
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "y_pkey" for table "y"
|
||||
WITH RECURSIVE t(a) AS (
|
||||
SELECT 0
|
||||
UNION ALL
|
||||
@ -1890,11 +1895,7 @@ WITH t AS (
|
||||
INSERT INTO y VALUES(0)
|
||||
)
|
||||
VALUES(FALSE);
|
||||
column1
|
||||
---------
|
||||
f
|
||||
(1 row)
|
||||
|
||||
ERROR: conditional DO INSTEAD rules are not supported for data-modifying statements in WITH
|
||||
DROP RULE y_rule ON y;
|
||||
-- check cte replace when pulling up
|
||||
-- case 1: exists/any sublink
|
||||
|
||||
@ -230,9 +230,10 @@ SELECT b FROM xc_alter_table_3 WHERE a = 11;
|
||||
|
||||
EXECUTE xc_alter_table_delete(11);
|
||||
SELECT b FROM xc_alter_table_3 WHERE a = 11 or a = 12;
|
||||
b
|
||||
---
|
||||
(0 rows)
|
||||
b
|
||||
-----
|
||||
nnn
|
||||
(1 row)
|
||||
|
||||
EXECUTE xc_alter_table_delete(12);
|
||||
SELECT count(*), sum(a), avg(a) FROM xc_alter_table_3; -- Check on tuple presence
|
||||
@ -263,9 +264,10 @@ SELECT b FROM xc_alter_table_3 WHERE a = 11;
|
||||
|
||||
EXECUTE xc_alter_table_delete(11);
|
||||
SELECT b FROM xc_alter_table_3 WHERE a = 11 or a = 12;
|
||||
b
|
||||
---
|
||||
(0 rows)
|
||||
b
|
||||
-----
|
||||
nnn
|
||||
(1 row)
|
||||
|
||||
EXECUTE xc_alter_table_delete(12);
|
||||
SELECT count(*), sum(a), avg(a) FROM xc_alter_table_3; -- Check on tuple presence
|
||||
@ -296,9 +298,10 @@ SELECT b FROM xc_alter_table_3 WHERE a = 11;
|
||||
|
||||
EXECUTE xc_alter_table_delete(11);
|
||||
SELECT b FROM xc_alter_table_3 WHERE a = 11 or a = 12;
|
||||
b
|
||||
---
|
||||
(0 rows)
|
||||
b
|
||||
-----
|
||||
nnn
|
||||
(1 row)
|
||||
|
||||
EXECUTE xc_alter_table_delete(12);
|
||||
SELECT count(*), sum(a), avg(a) FROM xc_alter_table_3; -- Check on tuple presence
|
||||
@ -329,9 +332,10 @@ SELECT b FROM xc_alter_table_3 WHERE a = 11;
|
||||
|
||||
EXECUTE xc_alter_table_delete(11);
|
||||
SELECT b FROM xc_alter_table_3 WHERE a = 11 or a = 12;
|
||||
b
|
||||
---
|
||||
(0 rows)
|
||||
b
|
||||
-----
|
||||
nnn
|
||||
(1 row)
|
||||
|
||||
EXECUTE xc_alter_table_delete(12);
|
||||
SELECT count(*), sum(a), avg(a) FROM xc_alter_table_3; -- Check on tuple presence
|
||||
@ -362,9 +366,10 @@ SELECT b FROM xc_alter_table_3 WHERE a = 11;
|
||||
|
||||
EXECUTE xc_alter_table_delete(11);
|
||||
SELECT b FROM xc_alter_table_3 WHERE a = 11 or a = 12;
|
||||
b
|
||||
---
|
||||
(0 rows)
|
||||
b
|
||||
-----
|
||||
nnn
|
||||
(1 row)
|
||||
|
||||
EXECUTE xc_alter_table_delete(12);
|
||||
-- Index and redistribution
|
||||
@ -397,9 +402,10 @@ SELECT b FROM xc_alter_table_3 WHERE a = 11;
|
||||
|
||||
EXECUTE xc_alter_table_delete(11);
|
||||
SELECT b FROM xc_alter_table_3 WHERE a = 11 or a = 12;
|
||||
b
|
||||
---
|
||||
(0 rows)
|
||||
b
|
||||
-----
|
||||
nnn
|
||||
(1 row)
|
||||
|
||||
EXECUTE xc_alter_table_delete(12);
|
||||
-- Add column on table
|
||||
|
||||
@ -142,11 +142,12 @@ create VIEW voo AS SELECT f1, f2 FROM foo;
|
||||
create OR REPLACE RULE voo_i AS ON INSERT TO voo DO INSTEAD
|
||||
INSERT INTO foo VALUES(new.*, 57) RETURNING f1, f2;
|
||||
INSERT INTO voo VALUES(11,'zit');
|
||||
ERROR: cannot insert into view "voo"
|
||||
HINT: You need an unconditional ON INSERT DO INSTEAD rule or an INSTEAD OF INSERT trigger.
|
||||
INSERT INTO voo VALUES(12,'zoo') RETURNING *, f1*2;
|
||||
ERROR: cannot insert into view "voo"
|
||||
HINT: You need an unconditional ON INSERT DO INSTEAD rule or an INSTEAD OF INSERT trigger.
|
||||
f1 | f2 | ?column?
|
||||
----+-----+----------
|
||||
12 | zoo | 24
|
||||
(1 row)
|
||||
|
||||
drop view voo;
|
||||
truncate table foo;
|
||||
alter sequence foo_f1_seq restart with 1;
|
||||
@ -382,11 +383,12 @@ INSERT INTO foo (f2,f3) VALUES ('test', DEFAULT), ('More', 11), (upper('more'),
|
||||
create VIEW voo AS SELECT f1, f3 FROM foo;
|
||||
create OR REPLACE RULE voo_u AS ON UPDATE TO voo DO INSTEAD UPDATE foo SET f3 = new.f3 WHERE f1 = old.f1 RETURNING f3, f1;
|
||||
update voo set f3 = f1 + 1;
|
||||
ERROR: cannot update view "voo"
|
||||
HINT: You need an unconditional ON UPDATE DO INSTEAD rule or an INSTEAD OF UPDATE trigger.
|
||||
update voo set f3 = f1 + 1 where f1 < 2 RETURNING *;
|
||||
ERROR: cannot update view "voo"
|
||||
HINT: You need an unconditional ON UPDATE DO INSTEAD rule or an INSTEAD OF UPDATE trigger.
|
||||
f1 | f3
|
||||
----+----
|
||||
2 | 1
|
||||
(1 row)
|
||||
|
||||
drop view voo;
|
||||
truncate table foo;
|
||||
alter sequence foo_f1_seq restart with 1;
|
||||
|
||||
@ -748,6 +748,8 @@ SELECT * FROM bug6051 ORDER BY 1;
|
||||
SELECT * FROM bug6051_2 ORDER BY 1;
|
||||
|
||||
-- a truly recursive CTE in the same list
|
||||
DROP TABLE y;
|
||||
CREATE TABLE y (a INTEGER PRIMARY KEY INITIALLY DEFERRED);
|
||||
WITH RECURSIVE t(a) AS (
|
||||
SELECT 0
|
||||
UNION ALL
|
||||
@ -759,7 +761,6 @@ WITH RECURSIVE t(a) AS (
|
||||
SELECT * FROM t2 JOIN y USING (a) ORDER BY a;
|
||||
|
||||
SELECT * FROM y order by 1;
|
||||
|
||||
-- data-modifying WITH in a modifying statement
|
||||
WITH t AS (
|
||||
DELETE FROM y
|
||||
|
||||
Reference in New Issue
Block a user