mirror of
https://github.com/postgres/postgres.git
synced 2025-07-31 22:04:40 +03:00
Second phase of committing Rod Taylor's pg_depend/pg_constraint patch.
pg_relcheck is gone; CHECK, UNIQUE, PRIMARY KEY, and FOREIGN KEY constraints all have real live entries in pg_constraint. pg_depend exists, and RESTRICT/CASCADE options work on most kinds of DROP; however, pg_depend is not yet very well populated with dependencies. (Most of the ones that are present at this point just replace formerly hardwired associations, such as the implicit drop of a relation's pg_type entry when the relation is dropped.) Need to add more logic to create dependency entries, improve pg_dump to dump constraints in place of indexes and triggers, and add some regression tests.
This commit is contained in:
@ -340,8 +340,6 @@ ERROR: UNIQUE constraint matching given keys for referenced table "tmp4" not fo
|
||||
DROP TABLE tmp5;
|
||||
DROP TABLE tmp4;
|
||||
DROP TABLE tmp3;
|
||||
NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "tmp2"
|
||||
NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "tmp2"
|
||||
DROP TABLE tmp2;
|
||||
-- Foreign key adding test with mixed types
|
||||
-- Note: these tables are TEMP to avoid name conflicts when this test
|
||||
@ -369,9 +367,9 @@ NOTICE: ALTER TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
|
||||
-- As should this
|
||||
ALTER TABLE FKTABLE ADD FOREIGN KEY(ftest1) references pktable(ptest1);
|
||||
NOTICE: ALTER TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
|
||||
DROP TABLE pktable;
|
||||
NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "fktable"
|
||||
NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "fktable"
|
||||
DROP TABLE pktable cascade;
|
||||
NOTICE: Drop cascades to constraint $2 on table fktable
|
||||
NOTICE: Drop cascades to constraint $1 on table fktable
|
||||
DROP TABLE fktable;
|
||||
CREATE TEMP TABLE PKTABLE (ptest1 int, ptest2 inet,
|
||||
PRIMARY KEY(ptest1, ptest2));
|
||||
@ -382,16 +380,16 @@ ALTER TABLE FKTABLE ADD FOREIGN KEY(ftest1, ftest2) references pktable;
|
||||
NOTICE: ALTER TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
|
||||
ERROR: Unable to identify an operator '=' for types 'cidr' and 'integer'
|
||||
You will have to retype this query using an explicit cast
|
||||
-- Again, so should this...
|
||||
DROP TABLE FKTABLE;
|
||||
-- Again, so should this...
|
||||
CREATE TEMP TABLE FKTABLE (ftest1 cidr, ftest2 timestamp);
|
||||
ALTER TABLE FKTABLE ADD FOREIGN KEY(ftest1, ftest2)
|
||||
references pktable(ptest1, ptest2);
|
||||
NOTICE: ALTER TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
|
||||
ERROR: Unable to identify an operator '=' for types 'cidr' and 'integer'
|
||||
You will have to retype this query using an explicit cast
|
||||
-- This fails because we mixed up the column ordering
|
||||
DROP TABLE FKTABLE;
|
||||
-- This fails because we mixed up the column ordering
|
||||
CREATE TEMP TABLE FKTABLE (ftest1 int, ftest2 inet);
|
||||
ALTER TABLE FKTABLE ADD FOREIGN KEY(ftest1, ftest2)
|
||||
references pktable(ptest2, ptest1);
|
||||
@ -445,7 +443,7 @@ create table atacc1 (test int check (test>3), test2 int);
|
||||
alter table atacc1 add check (test2>test);
|
||||
-- should fail for $2
|
||||
insert into atacc1 (test2, test) values (3, 4);
|
||||
ERROR: ExecInsert: rejected due to CHECK constraint $2
|
||||
ERROR: ExecInsert: rejected due to CHECK constraint $1
|
||||
drop table atacc1;
|
||||
-- inheritance related tests
|
||||
create table atacc1 (test int);
|
||||
@ -628,7 +626,7 @@ alter table atacc1 add constraint "atacc1_pkey" primary key (test);
|
||||
NOTICE: ALTER TABLE / ADD PRIMARY KEY will create implicit index 'atacc1_pkey' for table 'atacc1'
|
||||
alter table atacc1 alter column test drop not null;
|
||||
ERROR: ALTER TABLE: Attribute "test" is in a primary key
|
||||
drop index atacc1_pkey;
|
||||
alter table atacc1 drop constraint "atacc1_pkey";
|
||||
alter table atacc1 alter column test drop not null;
|
||||
insert into atacc1 values (null);
|
||||
alter table atacc1 alter test set not null;
|
||||
|
@ -1,11 +1,13 @@
|
||||
-- Test Comment / Drop
|
||||
create domain domaindroptest int4;
|
||||
comment on domain domaindroptest is 'About to drop this..';
|
||||
-- currently this will be disallowed
|
||||
create domain basetypetest domaindroptest;
|
||||
ERROR: DefineDomain: domaindroptest is not a basetype
|
||||
drop domain domaindroptest cascade;
|
||||
ERROR: DROP DOMAIN does not support the CASCADE keyword
|
||||
drop domain domaindroptest;
|
||||
-- this should fail because already gone
|
||||
drop domain domaindroptest cascade;
|
||||
ERROR: Type "domaindroptest" does not exist
|
||||
-- TEST Domains.
|
||||
create domain domainvarchar varchar(5);
|
||||
create domain domainnumeric numeric(8,2);
|
||||
|
@ -22,7 +22,7 @@ INSERT INTO FKTABLE VALUES (3, 4);
|
||||
INSERT INTO FKTABLE VALUES (NULL, 1);
|
||||
-- Insert a failed row into FK TABLE
|
||||
INSERT INTO FKTABLE VALUES (100, 2);
|
||||
ERROR: <unnamed> referential integrity violation - key referenced from fktable not found in pktable
|
||||
ERROR: $1 referential integrity violation - key referenced from fktable not found in pktable
|
||||
-- Check FKTABLE
|
||||
SELECT * FROM FKTABLE;
|
||||
ftest1 | ftest2
|
||||
@ -55,9 +55,8 @@ SELECT * FROM FKTABLE;
|
||||
1 | 3
|
||||
(3 rows)
|
||||
|
||||
DROP TABLE PKTABLE;
|
||||
NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "fktable"
|
||||
DROP TABLE FKTABLE;
|
||||
DROP TABLE PKTABLE;
|
||||
--
|
||||
-- check set NULL and table constraint on multiple columns
|
||||
--
|
||||
@ -138,8 +137,8 @@ SELECT * FROM FKTABLE;
|
||||
| | 8
|
||||
(5 rows)
|
||||
|
||||
DROP TABLE PKTABLE;
|
||||
NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "fktable"
|
||||
DROP TABLE PKTABLE CASCADE;
|
||||
NOTICE: Drop cascades to constraint constrname on table fktable
|
||||
DROP TABLE FKTABLE;
|
||||
--
|
||||
-- check set default and table constraint on multiple columns
|
||||
@ -223,8 +222,13 @@ SELECT * FROM FKTABLE;
|
||||
-1 | -2 | 8
|
||||
(5 rows)
|
||||
|
||||
-- this should fail for lack of CASCADE
|
||||
DROP TABLE PKTABLE;
|
||||
NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "fktable"
|
||||
NOTICE: constraint constrname2 on table fktable depends on table pktable
|
||||
ERROR: Cannot drop table pktable because other objects depend on it
|
||||
Use DROP ... CASCADE to drop the dependent objects too
|
||||
DROP TABLE PKTABLE CASCADE;
|
||||
NOTICE: Drop cascades to constraint constrname2 on table fktable
|
||||
DROP TABLE FKTABLE;
|
||||
--
|
||||
-- First test, check with no on delete or on update
|
||||
@ -246,7 +250,7 @@ INSERT INTO FKTABLE VALUES (3, 4);
|
||||
INSERT INTO FKTABLE VALUES (NULL, 1);
|
||||
-- Insert a failed row into FK TABLE
|
||||
INSERT INTO FKTABLE VALUES (100, 2);
|
||||
ERROR: <unnamed> referential integrity violation - key referenced from fktable not found in pktable
|
||||
ERROR: $1 referential integrity violation - key referenced from fktable not found in pktable
|
||||
-- Check FKTABLE
|
||||
SELECT * FROM FKTABLE;
|
||||
ftest1 | ftest2
|
||||
@ -270,7 +274,7 @@ SELECT * FROM PKTABLE;
|
||||
|
||||
-- Delete a row from PK TABLE (should fail)
|
||||
DELETE FROM PKTABLE WHERE ptest1=1;
|
||||
ERROR: <unnamed> referential integrity violation - key in pktable still referenced from fktable
|
||||
ERROR: $1 referential integrity violation - key in pktable still referenced from fktable
|
||||
-- Delete a row from PK TABLE (should succeed)
|
||||
DELETE FROM PKTABLE WHERE ptest1=5;
|
||||
-- Check PKTABLE for deletes
|
||||
@ -285,7 +289,7 @@ SELECT * FROM PKTABLE;
|
||||
|
||||
-- Update a row from PK TABLE (should fail)
|
||||
UPDATE PKTABLE SET ptest1=0 WHERE ptest1=2;
|
||||
ERROR: <unnamed> referential integrity violation - key in pktable still referenced from fktable
|
||||
ERROR: $1 referential integrity violation - key in pktable still referenced from fktable
|
||||
-- Update a row from PK TABLE (should succeed)
|
||||
UPDATE PKTABLE SET ptest1=0 WHERE ptest1=4;
|
||||
-- Check PKTABLE for updates
|
||||
@ -298,9 +302,8 @@ SELECT * FROM PKTABLE;
|
||||
0 | Test4
|
||||
(4 rows)
|
||||
|
||||
DROP TABLE PKTABLE;
|
||||
NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "fktable"
|
||||
DROP TABLE FKTABLE;
|
||||
DROP TABLE PKTABLE;
|
||||
-- MATCH unspecified
|
||||
-- Base test restricting update/delete
|
||||
CREATE TABLE PKTABLE ( ptest1 int, ptest2 int, ptest3 int, ptest4 text, PRIMARY KEY(ptest1, ptest2, ptest3) );
|
||||
@ -363,8 +366,6 @@ SELECT * from FKTABLE;
|
||||
(5 rows)
|
||||
|
||||
DROP TABLE FKTABLE;
|
||||
NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "pktable"
|
||||
NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "pktable"
|
||||
DROP TABLE PKTABLE;
|
||||
-- cascade update/delete
|
||||
CREATE TABLE PKTABLE ( ptest1 int, ptest2 int, ptest3 int, ptest4 text, PRIMARY KEY(ptest1, ptest2, ptest3) );
|
||||
@ -462,8 +463,6 @@ SELECT * from FKTABLE;
|
||||
(4 rows)
|
||||
|
||||
DROP TABLE FKTABLE;
|
||||
NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "pktable"
|
||||
NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "pktable"
|
||||
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) );
|
||||
@ -568,8 +567,6 @@ SELECT * from FKTABLE;
|
||||
(6 rows)
|
||||
|
||||
DROP TABLE FKTABLE;
|
||||
NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "pktable"
|
||||
NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "pktable"
|
||||
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) );
|
||||
@ -687,8 +684,6 @@ SELECT * from FKTABLE;
|
||||
(7 rows)
|
||||
|
||||
DROP TABLE FKTABLE;
|
||||
NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "pktable"
|
||||
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'
|
||||
@ -734,14 +729,10 @@ ERROR: Unable to identify an operator '=' for types 'inet' and 'integer'
|
||||
CREATE TABLE FKTABLE (ftest1 varchar REFERENCES pktable);
|
||||
NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
|
||||
DROP TABLE FKTABLE;
|
||||
NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "pktable"
|
||||
NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "pktable"
|
||||
-- As should this
|
||||
CREATE TABLE FKTABLE (ftest1 varchar REFERENCES pktable(ptest1));
|
||||
NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
|
||||
DROP TABLE FKTABLE;
|
||||
NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "pktable"
|
||||
NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "pktable"
|
||||
DROP TABLE PKTABLE;
|
||||
-- Two columns, two tables
|
||||
CREATE TABLE PKTABLE (ptest1 int, ptest2 inet, PRIMARY KEY(ptest1, ptest2));
|
||||
@ -775,14 +766,10 @@ ERROR: Unable to identify an operator '=' for types 'integer' and 'inet'
|
||||
CREATE TABLE FKTABLE (ftest1 int, ftest2 inet, FOREIGN KEY(ftest2, ftest1) REFERENCES pktable(ptest2, ptest1));
|
||||
NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
|
||||
DROP TABLE FKTABLE;
|
||||
NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "pktable"
|
||||
NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "pktable"
|
||||
-- As does this
|
||||
CREATE TABLE FKTABLE (ftest1 int, ftest2 inet, FOREIGN KEY(ftest1, ftest2) REFERENCES pktable(ptest1, ptest2));
|
||||
NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
|
||||
DROP TABLE FKTABLE;
|
||||
NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "pktable"
|
||||
NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "pktable"
|
||||
DROP TABLE PKTABLE;
|
||||
-- Two columns, same table
|
||||
-- Make sure this still works...
|
||||
@ -832,25 +819,23 @@ insert into pktable(base1) values (1);
|
||||
insert into pktable(base1) values (2);
|
||||
-- let's insert a non-existant fktable value
|
||||
insert into fktable(ftest1) values (3);
|
||||
ERROR: <unnamed> referential integrity violation - key referenced from fktable not found in pktable
|
||||
ERROR: $1 referential integrity violation - key referenced from fktable not found in pktable
|
||||
-- let's make a valid row for that
|
||||
insert into pktable(base1) values (3);
|
||||
insert into fktable(ftest1) values (3);
|
||||
-- let's try removing a row that should fail from pktable
|
||||
delete from pktable where base1>2;
|
||||
ERROR: <unnamed> referential integrity violation - key in pktable still referenced from fktable
|
||||
ERROR: $1 referential integrity violation - key in pktable still referenced from fktable
|
||||
-- okay, let's try updating all of the base1 values to *4
|
||||
-- which should fail.
|
||||
update pktable set base1=base1*4;
|
||||
ERROR: <unnamed> referential integrity violation - key in pktable still referenced from fktable
|
||||
ERROR: $1 referential integrity violation - key in pktable still referenced from fktable
|
||||
-- okay, let's try an update that should work.
|
||||
update pktable set base1=base1*4 where base1<3;
|
||||
-- and a delete that should work
|
||||
delete from pktable where base1>3;
|
||||
-- cleanup
|
||||
drop table fktable;
|
||||
NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "pktable"
|
||||
NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "pktable"
|
||||
delete from pktable;
|
||||
-- Now 2 columns 2 tables, matching types
|
||||
create table fktable (ftest1 int, ftest2 int, foreign key(ftest1, ftest2) references pktable(base1, ptest1));
|
||||
@ -860,25 +845,23 @@ insert into pktable(base1, ptest1) values (1, 1);
|
||||
insert into pktable(base1, ptest1) values (2, 2);
|
||||
-- let's insert a non-existant fktable value
|
||||
insert into fktable(ftest1, ftest2) values (3, 1);
|
||||
ERROR: <unnamed> referential integrity violation - key referenced from fktable not found in pktable
|
||||
ERROR: $1 referential integrity violation - key referenced from fktable not found in pktable
|
||||
-- let's make a valid row for that
|
||||
insert into pktable(base1,ptest1) values (3, 1);
|
||||
insert into fktable(ftest1, ftest2) values (3, 1);
|
||||
-- let's try removing a row that should fail from pktable
|
||||
delete from pktable where base1>2;
|
||||
ERROR: <unnamed> referential integrity violation - key in pktable still referenced from fktable
|
||||
ERROR: $1 referential integrity violation - key in pktable still referenced from fktable
|
||||
-- okay, let's try updating all of the base1 values to *4
|
||||
-- which should fail.
|
||||
update pktable set base1=base1*4;
|
||||
ERROR: <unnamed> referential integrity violation - key in pktable still referenced from fktable
|
||||
ERROR: $1 referential integrity violation - key in pktable still referenced from fktable
|
||||
-- okay, let's try an update that should work.
|
||||
update pktable set base1=base1*4 where base1<3;
|
||||
-- and a delete that should work
|
||||
delete from pktable where base1>3;
|
||||
-- cleanup
|
||||
drop table fktable;
|
||||
NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "pktable"
|
||||
NOTICE: DROP TABLE implicitly drops referential integrity trigger from table "pktable"
|
||||
drop table pktable;
|
||||
drop table pktable_base;
|
||||
-- Now we'll do one all in 1 table with 2 columns of matching types
|
||||
@ -893,13 +876,13 @@ insert into pktable (base1, ptest1, base2, ptest2) values (2, 2, 2, 1);
|
||||
insert into pktable (base1, ptest1, base2, ptest2) values (1, 3, 2, 2);
|
||||
-- fails (3,2) isn't in base1, ptest1
|
||||
insert into pktable (base1, ptest1, base2, ptest2) values (2, 3, 3, 2);
|
||||
ERROR: <unnamed> referential integrity violation - key referenced from pktable not found in pktable
|
||||
ERROR: $1 referential integrity violation - key referenced from pktable not found in pktable
|
||||
-- fails (2,2) is being referenced
|
||||
delete from pktable where base1=2;
|
||||
ERROR: <unnamed> referential integrity violation - key in pktable still referenced from pktable
|
||||
ERROR: $1 referential integrity violation - key in pktable still referenced from pktable
|
||||
-- fails (1,1) is being referenced (twice)
|
||||
update pktable set base1=3 where base1=1;
|
||||
ERROR: <unnamed> referential integrity violation - key referenced from pktable not found in pktable
|
||||
ERROR: $1 referential integrity violation - key referenced from pktable not found in pktable
|
||||
-- this sequence of two deletes will work, since after the first there will be no (2,*) references
|
||||
delete from pktable where base2=2;
|
||||
delete from pktable where base1=2;
|
||||
|
@ -38,8 +38,10 @@ SELECT relname, relhasindex
|
||||
pg_attrdef | t
|
||||
pg_attribute | t
|
||||
pg_class | t
|
||||
pg_constraint | t
|
||||
pg_conversion | t
|
||||
pg_database | t
|
||||
pg_depend | t
|
||||
pg_description | t
|
||||
pg_group | t
|
||||
pg_index | t
|
||||
@ -50,7 +52,6 @@ SELECT relname, relhasindex
|
||||
pg_opclass | t
|
||||
pg_operator | t
|
||||
pg_proc | t
|
||||
pg_relcheck | t
|
||||
pg_rewrite | t
|
||||
pg_shadow | t
|
||||
pg_statistic | t
|
||||
@ -61,5 +62,5 @@ SELECT relname, relhasindex
|
||||
shighway | t
|
||||
tenk1 | t
|
||||
tenk2 | t
|
||||
(51 rows)
|
||||
(52 rows)
|
||||
|
||||
|
@ -123,7 +123,7 @@ INSERT INTO INSERT_TBL(y) VALUES ('Y');
|
||||
ERROR: ExecInsert: rejected due to CHECK constraint insert_con
|
||||
INSERT INTO INSERT_TBL(y) VALUES ('Y');
|
||||
INSERT INTO INSERT_TBL(x,z) VALUES (1, -2);
|
||||
ERROR: ExecInsert: rejected due to CHECK constraint $2
|
||||
ERROR: ExecInsert: rejected due to CHECK constraint $1
|
||||
INSERT INTO INSERT_TBL(z,x) VALUES (-7, 7);
|
||||
INSERT INTO INSERT_TBL VALUES (5, 'check failed', -5);
|
||||
ERROR: ExecInsert: rejected due to CHECK constraint insert_con
|
||||
@ -139,7 +139,7 @@ SELECT '' AS four, * FROM INSERT_TBL;
|
||||
(4 rows)
|
||||
|
||||
INSERT INTO INSERT_TBL(y,z) VALUES ('check failed', 4);
|
||||
ERROR: ExecInsert: rejected due to CHECK constraint $2
|
||||
ERROR: ExecInsert: rejected due to CHECK constraint $1
|
||||
INSERT INTO INSERT_TBL(x,y) VALUES (5, 'check failed');
|
||||
ERROR: ExecInsert: rejected due to CHECK constraint insert_con
|
||||
INSERT INTO INSERT_TBL(x,y) VALUES (5, '!check failed');
|
||||
|
@ -250,7 +250,7 @@ CREATE TEMP TABLE FKTABLE (ftest1 varchar);
|
||||
ALTER TABLE FKTABLE ADD FOREIGN KEY(ftest1) references pktable;
|
||||
-- As should this
|
||||
ALTER TABLE FKTABLE ADD FOREIGN KEY(ftest1) references pktable(ptest1);
|
||||
DROP TABLE pktable;
|
||||
DROP TABLE pktable cascade;
|
||||
DROP TABLE fktable;
|
||||
|
||||
CREATE TEMP TABLE PKTABLE (ptest1 int, ptest2 inet,
|
||||
@ -258,13 +258,13 @@ CREATE TEMP TABLE PKTABLE (ptest1 int, ptest2 inet,
|
||||
-- This should fail, because we just chose really odd types
|
||||
CREATE TEMP TABLE FKTABLE (ftest1 cidr, ftest2 timestamp);
|
||||
ALTER TABLE FKTABLE ADD FOREIGN KEY(ftest1, ftest2) references pktable;
|
||||
-- Again, so should this...
|
||||
DROP TABLE FKTABLE;
|
||||
-- Again, so should this...
|
||||
CREATE TEMP TABLE FKTABLE (ftest1 cidr, ftest2 timestamp);
|
||||
ALTER TABLE FKTABLE ADD FOREIGN KEY(ftest1, ftest2)
|
||||
references pktable(ptest1, ptest2);
|
||||
-- This fails because we mixed up the column ordering
|
||||
DROP TABLE FKTABLE;
|
||||
-- This fails because we mixed up the column ordering
|
||||
CREATE TEMP TABLE FKTABLE (ftest1 int, ftest2 inet);
|
||||
ALTER TABLE FKTABLE ADD FOREIGN KEY(ftest1, ftest2)
|
||||
references pktable(ptest2, ptest1);
|
||||
@ -486,7 +486,7 @@ alter table foo alter column bar drop not null;
|
||||
create table atacc1 (test int not null);
|
||||
alter table atacc1 add constraint "atacc1_pkey" primary key (test);
|
||||
alter table atacc1 alter column test drop not null;
|
||||
drop index atacc1_pkey;
|
||||
alter table atacc1 drop constraint "atacc1_pkey";
|
||||
alter table atacc1 alter column test drop not null;
|
||||
insert into atacc1 values (null);
|
||||
alter table atacc1 alter test set not null;
|
||||
|
@ -4,11 +4,14 @@
|
||||
create domain domaindroptest int4;
|
||||
comment on domain domaindroptest is 'About to drop this..';
|
||||
|
||||
-- currently this will be disallowed
|
||||
create domain basetypetest domaindroptest;
|
||||
|
||||
drop domain domaindroptest cascade;
|
||||
drop domain domaindroptest;
|
||||
|
||||
-- this should fail because already gone
|
||||
drop domain domaindroptest cascade;
|
||||
|
||||
|
||||
-- TEST Domains.
|
||||
|
||||
|
@ -40,8 +40,8 @@ UPDATE PKTABLE SET ptest1=1 WHERE ptest1=2;
|
||||
-- Check FKTABLE for update of matched row
|
||||
SELECT * FROM FKTABLE;
|
||||
|
||||
DROP TABLE PKTABLE;
|
||||
DROP TABLE FKTABLE;
|
||||
DROP TABLE PKTABLE;
|
||||
|
||||
--
|
||||
-- check set NULL and table constraint on multiple columns
|
||||
@ -92,7 +92,7 @@ UPDATE PKTABLE SET ptest1=1 WHERE ptest1=2;
|
||||
-- Check FKTABLE for update of matched row
|
||||
SELECT * FROM FKTABLE;
|
||||
|
||||
DROP TABLE PKTABLE;
|
||||
DROP TABLE PKTABLE CASCADE;
|
||||
DROP TABLE FKTABLE;
|
||||
|
||||
--
|
||||
@ -147,7 +147,9 @@ UPDATE PKTABLE SET ptest1=1 WHERE ptest1=2;
|
||||
-- Check FKTABLE for update of matched row
|
||||
SELECT * FROM FKTABLE;
|
||||
|
||||
-- this should fail for lack of CASCADE
|
||||
DROP TABLE PKTABLE;
|
||||
DROP TABLE PKTABLE CASCADE;
|
||||
DROP TABLE FKTABLE;
|
||||
|
||||
|
||||
@ -197,8 +199,8 @@ UPDATE PKTABLE SET ptest1=0 WHERE ptest1=4;
|
||||
-- Check PKTABLE for updates
|
||||
SELECT * FROM PKTABLE;
|
||||
|
||||
DROP TABLE PKTABLE;
|
||||
DROP TABLE FKTABLE;
|
||||
DROP TABLE PKTABLE;
|
||||
|
||||
|
||||
-- MATCH unspecified
|
||||
|
Reference in New Issue
Block a user