|
|
|
@ -6,7 +6,7 @@
|
|
|
|
|
-- First test, check and cascade
|
|
|
|
|
--
|
|
|
|
|
CREATE TABLE PKTABLE ( ptest1 int PRIMARY KEY, ptest2 text );
|
|
|
|
|
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE / ADD PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
CREATE TABLE FKTABLE ( ftest1 int REFERENCES PKTABLE MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE, ftest2 int );
|
|
|
|
|
NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
|
|
|
|
|
-- Insert test data into PKTABLE
|
|
|
|
@ -62,7 +62,7 @@ DROP TABLE FKTABLE;
|
|
|
|
|
-- check set NULL and table constraint on multiple columns
|
|
|
|
|
--
|
|
|
|
|
CREATE TABLE PKTABLE ( ptest1 int, ptest2 int, ptest3 text, PRIMARY KEY(ptest1, ptest2) );
|
|
|
|
|
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE / ADD PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
CREATE TABLE FKTABLE ( ftest1 int, ftest2 int, ftest3 int, CONSTRAINT constrname FOREIGN KEY(ftest1, ftest2)
|
|
|
|
|
REFERENCES PKTABLE MATCH FULL ON DELETE SET NULL ON UPDATE SET NULL);
|
|
|
|
|
NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
|
|
|
|
@ -145,7 +145,7 @@ DROP TABLE FKTABLE;
|
|
|
|
|
-- check set default and table constraint on multiple columns
|
|
|
|
|
--
|
|
|
|
|
CREATE TABLE PKTABLE ( ptest1 int, ptest2 int, ptest3 text, PRIMARY KEY(ptest1, ptest2) );
|
|
|
|
|
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE / ADD PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
CREATE TABLE FKTABLE ( ftest1 int DEFAULT -1, ftest2 int DEFAULT -2, ftest3 int, CONSTRAINT constrname2 FOREIGN KEY(ftest1, ftest2)
|
|
|
|
|
REFERENCES PKTABLE MATCH FULL ON DELETE SET DEFAULT ON UPDATE SET DEFAULT);
|
|
|
|
|
NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
|
|
|
|
@ -230,7 +230,7 @@ DROP TABLE FKTABLE;
|
|
|
|
|
-- First test, check with no on delete or on update
|
|
|
|
|
--
|
|
|
|
|
CREATE TABLE PKTABLE ( ptest1 int PRIMARY KEY, ptest2 text );
|
|
|
|
|
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE / ADD PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
CREATE TABLE FKTABLE ( ftest1 int REFERENCES PKTABLE MATCH FULL, ftest2 int );
|
|
|
|
|
NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
|
|
|
|
|
-- Insert test data into PKTABLE
|
|
|
|
@ -304,7 +304,7 @@ DROP TABLE FKTABLE;
|
|
|
|
|
-- MATCH unspecified
|
|
|
|
|
-- Base test restricting update/delete
|
|
|
|
|
CREATE TABLE PKTABLE ( ptest1 int, ptest2 int, ptest3 int, ptest4 text, PRIMARY KEY(ptest1, ptest2, ptest3) );
|
|
|
|
|
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE / ADD PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
CREATE TABLE FKTABLE ( ftest1 int, ftest2 int, ftest3 int, ftest4 int, CONSTRAINT constrname3
|
|
|
|
|
FOREIGN KEY(ftest1, ftest2, ftest3) REFERENCES PKTABLE);
|
|
|
|
|
NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
|
|
|
|
@ -368,7 +368,7 @@ NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "p
|
|
|
|
|
DROP TABLE PKTABLE;
|
|
|
|
|
-- cascade update/delete
|
|
|
|
|
CREATE TABLE PKTABLE ( ptest1 int, ptest2 int, ptest3 int, ptest4 text, PRIMARY KEY(ptest1, ptest2, ptest3) );
|
|
|
|
|
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE / ADD PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
CREATE TABLE FKTABLE ( ftest1 int, ftest2 int, ftest3 int, ftest4 int, CONSTRAINT constrname3
|
|
|
|
|
FOREIGN KEY(ftest1, ftest2, ftest3) REFERENCES PKTABLE
|
|
|
|
|
ON DELETE CASCADE ON UPDATE CASCADE);
|
|
|
|
@ -467,7 +467,7 @@ NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "p
|
|
|
|
|
DROP TABLE PKTABLE;
|
|
|
|
|
-- set null update / set default delete
|
|
|
|
|
CREATE TABLE PKTABLE ( ptest1 int, ptest2 int, ptest3 int, ptest4 text, PRIMARY KEY(ptest1, ptest2, ptest3) );
|
|
|
|
|
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE / ADD PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
CREATE TABLE FKTABLE ( ftest1 int DEFAULT 0, ftest2 int, ftest3 int, ftest4 int, CONSTRAINT constrname3
|
|
|
|
|
FOREIGN KEY(ftest1, ftest2, ftest3) REFERENCES PKTABLE
|
|
|
|
|
ON DELETE SET DEFAULT ON UPDATE SET NULL);
|
|
|
|
@ -573,7 +573,7 @@ NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "p
|
|
|
|
|
DROP TABLE PKTABLE;
|
|
|
|
|
-- set default update / set null delete
|
|
|
|
|
CREATE TABLE PKTABLE ( ptest1 int, ptest2 int, ptest3 int, ptest4 text, PRIMARY KEY(ptest1, ptest2, ptest3) );
|
|
|
|
|
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE / ADD PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
CREATE TABLE FKTABLE ( ftest1 int DEFAULT 0, ftest2 int DEFAULT -1, ftest3 int, ftest4 int, CONSTRAINT constrname3
|
|
|
|
|
FOREIGN KEY(ftest1, ftest2, ftest3) REFERENCES PKTABLE
|
|
|
|
|
ON DELETE SET NULL ON UPDATE SET DEFAULT);
|
|
|
|
@ -691,7 +691,7 @@ NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "p
|
|
|
|
|
NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "pktable"
|
|
|
|
|
DROP TABLE PKTABLE;
|
|
|
|
|
CREATE TABLE PKTABLE (ptest1 int PRIMARY KEY);
|
|
|
|
|
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE / ADD PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
CREATE TABLE FKTABLE_FAIL1 ( ftest1 int, CONSTRAINT fkfail1 FOREIGN KEY (ftest2) REFERENCES PKTABLE);
|
|
|
|
|
NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
|
|
|
|
|
ERROR: CREATE TABLE: column "ftest2" referenced in foreign key constraint does not exist
|
|
|
|
@ -717,7 +717,7 @@ DROP TABLE PKTABLE;
|
|
|
|
|
--
|
|
|
|
|
-- Basic one column, two table setup
|
|
|
|
|
CREATE TABLE PKTABLE (ptest1 int PRIMARY KEY);
|
|
|
|
|
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE / ADD PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
-- This next should fail, because text=int does not exist
|
|
|
|
|
CREATE TABLE FKTABLE (ftest1 text REFERENCES pktable);
|
|
|
|
|
NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
|
|
|
|
@ -745,7 +745,7 @@ NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "p
|
|
|
|
|
DROP TABLE PKTABLE;
|
|
|
|
|
-- Two columns, two tables
|
|
|
|
|
CREATE TABLE PKTABLE (ptest1 int, ptest2 text, PRIMARY KEY(ptest1, ptest2));
|
|
|
|
|
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE / ADD PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
-- This should fail, because we just chose really odd types
|
|
|
|
|
CREATE TABLE FKTABLE (ftest1 cidr, ftest2 datetime, FOREIGN KEY(ftest1, ftest2) REFERENCES pktable);
|
|
|
|
|
NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
|
|
|
|
@ -788,33 +788,33 @@ DROP TABLE PKTABLE;
|
|
|
|
|
-- Make sure this still works...
|
|
|
|
|
CREATE TABLE PKTABLE (ptest1 int, ptest2 text, ptest3 int, ptest4 text, PRIMARY KEY(ptest1, ptest2), FOREIGN KEY(ptest3,
|
|
|
|
|
ptest4) REFERENCES pktable(ptest1, ptest2));
|
|
|
|
|
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE / ADD PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
|
|
|
|
|
DROP TABLE PKTABLE;
|
|
|
|
|
-- And this,
|
|
|
|
|
CREATE TABLE PKTABLE (ptest1 int, ptest2 text, ptest3 int, ptest4 text, PRIMARY KEY(ptest1, ptest2), FOREIGN KEY(ptest3,
|
|
|
|
|
ptest4) REFERENCES pktable);
|
|
|
|
|
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE / ADD PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
|
|
|
|
|
DROP TABLE PKTABLE;
|
|
|
|
|
-- This shouldn't (mixed up columns)
|
|
|
|
|
CREATE TABLE PKTABLE (ptest1 int, ptest2 text, ptest3 int, ptest4 text, PRIMARY KEY(ptest1, ptest2), FOREIGN KEY(ptest3,
|
|
|
|
|
ptest4) REFERENCES pktable(ptest2, ptest1));
|
|
|
|
|
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE / ADD PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
|
|
|
|
|
ERROR: Unable to identify an operator '=' for types 'integer' and 'text'
|
|
|
|
|
You will have to retype this query using an explicit cast
|
|
|
|
|
-- Nor should this... (same reason, we have 4,3 referencing 1,2 which mismatches types
|
|
|
|
|
CREATE TABLE PKTABLE (ptest1 int, ptest2 text, ptest3 int, ptest4 text, PRIMARY KEY(ptest1, ptest2), FOREIGN KEY(ptest4,
|
|
|
|
|
ptest3) REFERENCES pktable(ptest1, ptest2));
|
|
|
|
|
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE / ADD PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
|
|
|
|
|
ERROR: Unable to identify an operator '=' for types 'text' and 'integer'
|
|
|
|
|
You will have to retype this query using an explicit cast
|
|
|
|
|
-- Not this one either... Same as the last one except we didn't defined the columns being referenced.
|
|
|
|
|
CREATE TABLE PKTABLE (ptest1 int, ptest2 text, ptest3 int, ptest4 text, PRIMARY KEY(ptest1, ptest2), FOREIGN KEY(ptest4,
|
|
|
|
|
ptest3) REFERENCES pktable);
|
|
|
|
|
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE / ADD PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
|
|
|
|
|
ERROR: Unable to identify an operator '=' for types 'text' and 'integer'
|
|
|
|
|
You will have to retype this query using an explicit cast
|
|
|
|
@ -823,7 +823,7 @@ ERROR: Unable to identify an operator '=' for types 'text' and 'integer'
|
|
|
|
|
-- Basic 2 table case: 1 column of matching types.
|
|
|
|
|
create table pktable_base (base1 int not null);
|
|
|
|
|
create table pktable (ptest1 int, primary key(base1), unique(base1, ptest1)) inherits (pktable_base);
|
|
|
|
|
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE / ADD PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE / ADD UNIQUE will create implicit index 'pktable_base1_key' for table 'pktable'
|
|
|
|
|
create table fktable (ftest1 int references pktable(base1));
|
|
|
|
|
NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
|
|
|
|
@ -885,7 +885,7 @@ drop table pktable_base;
|
|
|
|
|
create table pktable_base(base1 int not null, base2 int);
|
|
|
|
|
create table pktable(ptest1 int, ptest2 int, primary key(base1, ptest1), foreign key(base2, ptest2) references
|
|
|
|
|
pktable(base1, ptest1)) inherits (pktable_base);
|
|
|
|
|
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE / ADD PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
|
|
|
|
|
insert into pktable (base1, ptest1, base2, ptest2) values (1, 1, 1, 1);
|
|
|
|
|
insert into pktable (base1, ptest1, base2, ptest2) values (2, 1, 1, 1);
|
|
|
|
@ -908,7 +908,7 @@ drop table pktable_base;
|
|
|
|
|
-- 2 columns (2 tables), mismatched types
|
|
|
|
|
create table pktable_base(base1 int not null);
|
|
|
|
|
create table pktable(ptest1 text, primary key(base1, ptest1)) inherits (pktable_base);
|
|
|
|
|
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE / ADD PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
-- just generally bad types (with and without column references on the referenced table)
|
|
|
|
|
create table fktable(ftest1 cidr, ftest2 int[], foreign key (ftest1, ftest2) references pktable);
|
|
|
|
|
NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
|
|
|
|
@ -937,25 +937,25 @@ drop table pktable_base;
|
|
|
|
|
create table pktable_base(base1 int not null, base2 int);
|
|
|
|
|
create table pktable(ptest1 text, ptest2 text[], primary key(base1, ptest1), foreign key(base2, ptest2) references
|
|
|
|
|
pktable(base1, ptest1)) inherits (pktable_base);
|
|
|
|
|
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE / ADD PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
|
|
|
|
|
ERROR: Unable to identify an operator '=' for types 'text[]' and 'text'
|
|
|
|
|
You will have to retype this query using an explicit cast
|
|
|
|
|
create table pktable(ptest1 text, ptest2 text, primary key(base1, ptest1), foreign key(base2, ptest2) references
|
|
|
|
|
pktable(ptest1, base1)) inherits (pktable_base);
|
|
|
|
|
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE / ADD PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
|
|
|
|
|
ERROR: Unable to identify an operator '=' for types 'integer' and 'text'
|
|
|
|
|
You will have to retype this query using an explicit cast
|
|
|
|
|
create table pktable(ptest1 text, ptest2 text, primary key(base1, ptest1), foreign key(ptest2, base2) references
|
|
|
|
|
pktable(base1, ptest1)) inherits (pktable_base);
|
|
|
|
|
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE / ADD PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
|
|
|
|
|
ERROR: Unable to identify an operator '=' for types 'text' and 'integer'
|
|
|
|
|
You will have to retype this query using an explicit cast
|
|
|
|
|
create table pktable(ptest1 text, ptest2 text, primary key(base1, ptest1), foreign key(ptest2, base2) references
|
|
|
|
|
pktable(base1, ptest1)) inherits (pktable_base);
|
|
|
|
|
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE / ADD PRIMARY KEY will create implicit index 'pktable_pkey' for table 'pktable'
|
|
|
|
|
NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
|
|
|
|
|
ERROR: Unable to identify an operator '=' for types 'text' and 'integer'
|
|
|
|
|
You will have to retype this query using an explicit cast
|
|
|
|
|