15670430创建于 2020年12月28日历史提交
--
-- TEST CASE: references about view and table
--
SET DATESTYLE TO ISO;
CREATE TABLE cmpr_references_02(
        c_int_1 INTEGER NOT NULL,
        c_int_2 INTEGER NOT NULL,
        c_int_3 INTEGER NOT NULL,
        c_int_4 INTEGER NOT NULL,
        c_int_5 INTEGER NOT NULL,
        c_int_6 INTEGER NOT NULL,
        c_int_7 INTEGER NOT NULL,
        c_int_8 INTEGER NOT NULL,
        c_int_9 INTEGER NOT NULL,
        c_int_10 INTEGER NOT NULL,
        c_VARCHAR_11 VARCHAR(120) NOT NULL,
        c_VARCHAR_12 VARCHAR(120) NOT NULL
)WITH (FILLFACTOR=90);
CREATE TABLE cmpr_references_f03(
        c_int_1 INTEGER UNIQUE,
        c_VARCHAR_2 VARCHAR(120) PRIMARY KEY
);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "cmpr_references_f03_pkey" for table "cmpr_references_f03"
NOTICE:  CREATE TABLE / UNIQUE will create implicit index "cmpr_references_f03_c_int_1_key" for table "cmpr_references_f03"
CREATE TABLE cmpr_references_03(
        c_int_1 INTEGER,
        c_int_2 INTEGER,
        c_int_3 INTEGER,
        c_int_4 INTEGER,
        c_int_5 INTEGER,
        c_int_6 INTEGER,
        c_int_7 INTEGER,
        c_int_8 INTEGER,
        c_int_9 INTEGER,
        c_int_10 INTEGER,
        c_VARCHAR_11 VARCHAR(120),
        c_VARCHAR_12 VARCHAR(120))WITH (FILLFACTOR=90) ;
INSERT INTO cmpr_references_02 VALUES (generate_series(1,10000,10),generate_series(1,10000,10),generate_series(2,10000,10),generate_series(2,10000,10),generate_series(2,10000,10),generate_series(2,10000,10),generate_series(1,10000,10),generate_series(2,10000,10),generate_series(1,10000,10),generate_series(2,10000,10),'aaa'||MOD(generate_series(6,10000,10),200),'aaa'||MOD(generate_series(6,10000,10),200));
INSERT INTO cmpr_references_f03 VALUES (generate_series(1,10000,10),'aaa'||generate_series(6,10000,10));
COPY cmpr_references_02 TO '@abs_srcdir@/data/cmpr_references_02.data';
COPY cmpr_references_03 FROM '@abs_srcdir@/data/cmpr_references_02.data';
(SELECT * FROM cmpr_references_02) MINUS ALL (SELECT * FROM cmpr_references_03);
 c_int_1 | c_int_2 | c_int_3 | c_int_4 | c_int_5 | c_int_6 | c_int_7 | c_int_8 | c_int_9 | c_int_10 | c_varchar_11 | c_varchar_12 
---------+---------+---------+---------+---------+---------+---------+---------+---------+----------+--------------+--------------
(0 rows)

(SELECT * FROM cmpr_references_03) MINUS ALL (SELECT * FROM cmpr_references_02);
 c_int_1 | c_int_2 | c_int_3 | c_int_4 | c_int_5 | c_int_6 | c_int_7 | c_int_8 | c_int_9 | c_int_10 | c_varchar_11 | c_varchar_12 
---------+---------+---------+---------+---------+---------+---------+---------+---------+----------+--------------+--------------
(0 rows)

-- create and use view to update
CREATE OR REPLACE VIEW cmpr_references_v03( ref_1, ref_2) AS SELECT c_int_1, c_VARCHAR_11 FROM cmpr_references_03;
UPDATE cmpr_references_v03 SET ref_1=0, ref_2='aaa' WHERE ref_2='aaa'||6;
ERROR:  cannot update view "cmpr_references_v03"
HINT:  You need an unconditional ON UPDATE DO INSTEAD rule or an INSTEAD OF UPDATE trigger.
SELECT COUNT(*) FROM cmpr_references_v03 WHERE ref_2='aaa';
 count 
-------
     0
(1 row)

SELECT COUNT(*) FROM cmpr_references_v03 WHERE ref_2='aaa'||6;
 count 
-------
    50
(1 row)

INSERT INTO cmpr_references_f03 VALUES(0,'aaa');
UPDATE cmpr_references_v03 SET ref_1=0, ref_2='aaa' WHERE ref_2='aaa'||6;
ERROR:  cannot update view "cmpr_references_v03"
HINT:  You need an unconditional ON UPDATE DO INSTEAD rule or an INSTEAD OF UPDATE trigger.
SELECT COUNT(*) FROM cmpr_references_v03 WHERE ref_2='aaa'||6;
 count 
-------
    50
(1 row)

SELECT COUNT(*) FROM cmpr_references_v03 WHERE ref_2='aaa';
 count 
-------
     0
(1 row)

DROP TABLE cmpr_references_02;
DROP TABLE cmpr_references_03 CASCADE;
NOTICE:  drop cascades to view cmpr_references_v03
DROP TABLE cmpr_references_f03;
\! rm -fr @abs_srcdir@/data/cmpr_references_02.data