mirror of
https://github.com/postgres/postgres.git
synced 2025-05-08 07:21:33 +03:00
Just adds a regressions test suite for the ALTER TABLE/ADD PRIMARY KEY
feature. I'll do ALTER TABLE / DROP CONSTRAINT next... Christopher Kings-Lynne
This commit is contained in:
parent
f5810bb8a5
commit
b292cafcd4
@ -473,7 +473,7 @@ NOTICE: ALTER TABLE / ADD UNIQUE will create implicit index 'atacc_test1' for t
|
|||||||
ERROR: Cannot create unique index. Table contains non-unique values
|
ERROR: Cannot create unique index. Table contains non-unique values
|
||||||
insert into atacc1 (test) values (3);
|
insert into atacc1 (test) values (3);
|
||||||
drop table atacc1;
|
drop table atacc1;
|
||||||
-- let's do one where the unique contsraint fails
|
-- let's do one where the unique constraint fails
|
||||||
-- because the column doesn't exist
|
-- because the column doesn't exist
|
||||||
create table atacc1 ( test int );
|
create table atacc1 ( test int );
|
||||||
-- add a unique constraint (fails)
|
-- add a unique constraint (fails)
|
||||||
@ -505,3 +505,76 @@ insert into atacc1 (test2, test) values (3, 3);
|
|||||||
insert into atacc1 (test2, test) values (2, 3);
|
insert into atacc1 (test2, test) values (2, 3);
|
||||||
ERROR: Cannot insert a duplicate key into unique index atacc1_test_key
|
ERROR: Cannot insert a duplicate key into unique index atacc1_test_key
|
||||||
drop table atacc1;
|
drop table atacc1;
|
||||||
|
-- test primary key constraint adding
|
||||||
|
create table atacc1 ( test int );
|
||||||
|
-- add a primary key constraint
|
||||||
|
alter table atacc1 add constraint atacc_test1 primary key (test);
|
||||||
|
ERROR: Existing attribute "test" cannot be a PRIMARY KEY because it is not marked NOT NULL
|
||||||
|
-- insert first value
|
||||||
|
insert into atacc1 (test) values (2);
|
||||||
|
-- should fail
|
||||||
|
insert into atacc1 (test) values (2);
|
||||||
|
-- should succeed
|
||||||
|
insert into atacc1 (test) values (4);
|
||||||
|
-- inserting NULL should fail
|
||||||
|
insert into atacc1 (test) values(NULL);
|
||||||
|
-- try adding a primary key oid constraint
|
||||||
|
alter table atacc1 add constraint atacc_oid1 primary key(oid);
|
||||||
|
NOTICE: ALTER TABLE / ADD PRIMARY KEY will create implicit index 'atacc_oid1' for table 'atacc1'
|
||||||
|
drop table atacc1;
|
||||||
|
-- let's do one where the primary key constraint fails when added
|
||||||
|
create table atacc1 ( test int );
|
||||||
|
-- insert soon to be failing rows
|
||||||
|
insert into atacc1 (test) values (2);
|
||||||
|
insert into atacc1 (test) values (2);
|
||||||
|
-- add a primary key (fails)
|
||||||
|
alter table atacc1 add constraint atacc_test1 primary key (test);
|
||||||
|
ERROR: Existing attribute "test" cannot be a PRIMARY KEY because it is not marked NOT NULL
|
||||||
|
insert into atacc1 (test) values (3);
|
||||||
|
drop table atacc1;
|
||||||
|
-- let's do another one where the primary key constraint fails when added
|
||||||
|
create table atacc1 ( test int );
|
||||||
|
-- insert soon to be failing row
|
||||||
|
insert into atacc1 (test) values (NULL);
|
||||||
|
-- add a primary key (fails)
|
||||||
|
alter table atacc1 add constraint atacc_test1 primary key (test);
|
||||||
|
ERROR: Existing attribute "test" cannot be a PRIMARY KEY because it is not marked NOT NULL
|
||||||
|
insert into atacc1 (test) values (3);
|
||||||
|
drop table atacc1;
|
||||||
|
-- let's do one where the primary key constraint fails
|
||||||
|
-- because the column doesn't exist
|
||||||
|
create table atacc1 ( test int );
|
||||||
|
-- add a primary key constraint (fails)
|
||||||
|
alter table atacc1 add constraint atacc_test1 primary key (test1);
|
||||||
|
ERROR: ALTER TABLE: column "test1" named in key does not exist
|
||||||
|
drop table atacc1;
|
||||||
|
-- something a little more complicated
|
||||||
|
create table atacc1 ( test int, test2 int);
|
||||||
|
-- add a primary key constraint
|
||||||
|
alter table atacc1 add constraint atacc_test1 primary key (test, test2);
|
||||||
|
ERROR: Existing attribute "test" cannot be a PRIMARY KEY because it is not marked NOT NULL
|
||||||
|
-- try adding a second primary key - should fail
|
||||||
|
alter table atacc1 add constraint atacc_test2 primary key (test);
|
||||||
|
ERROR: Existing attribute "test" cannot be a PRIMARY KEY because it is not marked NOT NULL
|
||||||
|
-- insert initial value
|
||||||
|
insert into atacc1 (test,test2) values (4,4);
|
||||||
|
-- should fail
|
||||||
|
insert into atacc1 (test,test2) values (4,4);
|
||||||
|
insert into atacc1 (test,test2) values (NULL,3);
|
||||||
|
insert into atacc1 (test,test2) values (3, NULL);
|
||||||
|
insert into atacc1 (test,test2) values (NULL,NULL);
|
||||||
|
-- should all succeed
|
||||||
|
insert into atacc1 (test,test2) values (4,5);
|
||||||
|
insert into atacc1 (test,test2) values (5,4);
|
||||||
|
insert into atacc1 (test,test2) values (5,5);
|
||||||
|
drop table atacc1;
|
||||||
|
-- lets do some naming tests
|
||||||
|
create table atacc1 (test int, test2 int, primary key(test));
|
||||||
|
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'atacc1_pkey' for table 'atacc1'
|
||||||
|
-- only first should succeed
|
||||||
|
insert into atacc1 (test2, test) values (3, 3);
|
||||||
|
insert into atacc1 (test2, test) values (2, 3);
|
||||||
|
ERROR: Cannot insert a duplicate key into unique index atacc1_pkey
|
||||||
|
insert into atacc1 (test2, test) values (1, NULL);
|
||||||
|
ERROR: ExecAppend: Fail to add null value in not null attribute test
|
||||||
|
drop table atacc1;
|
||||||
|
@ -354,7 +354,7 @@ alter table atacc1 add constraint atacc_test1 unique (test);
|
|||||||
insert into atacc1 (test) values (3);
|
insert into atacc1 (test) values (3);
|
||||||
drop table atacc1;
|
drop table atacc1;
|
||||||
|
|
||||||
-- let's do one where the unique contsraint fails
|
-- let's do one where the unique constraint fails
|
||||||
-- because the column doesn't exist
|
-- because the column doesn't exist
|
||||||
create table atacc1 ( test int );
|
create table atacc1 ( test int );
|
||||||
-- add a unique constraint (fails)
|
-- add a unique constraint (fails)
|
||||||
@ -382,3 +382,73 @@ alter table atacc1 add unique (test2);
|
|||||||
insert into atacc1 (test2, test) values (3, 3);
|
insert into atacc1 (test2, test) values (3, 3);
|
||||||
insert into atacc1 (test2, test) values (2, 3);
|
insert into atacc1 (test2, test) values (2, 3);
|
||||||
drop table atacc1;
|
drop table atacc1;
|
||||||
|
|
||||||
|
-- test primary key constraint adding
|
||||||
|
|
||||||
|
create table atacc1 ( test int );
|
||||||
|
-- add a primary key constraint
|
||||||
|
alter table atacc1 add constraint atacc_test1 primary key (test);
|
||||||
|
-- insert first value
|
||||||
|
insert into atacc1 (test) values (2);
|
||||||
|
-- should fail
|
||||||
|
insert into atacc1 (test) values (2);
|
||||||
|
-- should succeed
|
||||||
|
insert into atacc1 (test) values (4);
|
||||||
|
-- inserting NULL should fail
|
||||||
|
insert into atacc1 (test) values(NULL);
|
||||||
|
-- try adding a primary key oid constraint
|
||||||
|
alter table atacc1 add constraint atacc_oid1 primary key(oid);
|
||||||
|
drop table atacc1;
|
||||||
|
|
||||||
|
-- let's do one where the primary key constraint fails when added
|
||||||
|
create table atacc1 ( test int );
|
||||||
|
-- insert soon to be failing rows
|
||||||
|
insert into atacc1 (test) values (2);
|
||||||
|
insert into atacc1 (test) values (2);
|
||||||
|
-- add a primary key (fails)
|
||||||
|
alter table atacc1 add constraint atacc_test1 primary key (test);
|
||||||
|
insert into atacc1 (test) values (3);
|
||||||
|
drop table atacc1;
|
||||||
|
|
||||||
|
-- let's do another one where the primary key constraint fails when added
|
||||||
|
create table atacc1 ( test int );
|
||||||
|
-- insert soon to be failing row
|
||||||
|
insert into atacc1 (test) values (NULL);
|
||||||
|
-- add a primary key (fails)
|
||||||
|
alter table atacc1 add constraint atacc_test1 primary key (test);
|
||||||
|
insert into atacc1 (test) values (3);
|
||||||
|
drop table atacc1;
|
||||||
|
|
||||||
|
-- let's do one where the primary key constraint fails
|
||||||
|
-- because the column doesn't exist
|
||||||
|
create table atacc1 ( test int );
|
||||||
|
-- add a primary key constraint (fails)
|
||||||
|
alter table atacc1 add constraint atacc_test1 primary key (test1);
|
||||||
|
drop table atacc1;
|
||||||
|
|
||||||
|
-- something a little more complicated
|
||||||
|
create table atacc1 ( test int, test2 int);
|
||||||
|
-- add a primary key constraint
|
||||||
|
alter table atacc1 add constraint atacc_test1 primary key (test, test2);
|
||||||
|
-- try adding a second primary key - should fail
|
||||||
|
alter table atacc1 add constraint atacc_test2 primary key (test);
|
||||||
|
-- insert initial value
|
||||||
|
insert into atacc1 (test,test2) values (4,4);
|
||||||
|
-- should fail
|
||||||
|
insert into atacc1 (test,test2) values (4,4);
|
||||||
|
insert into atacc1 (test,test2) values (NULL,3);
|
||||||
|
insert into atacc1 (test,test2) values (3, NULL);
|
||||||
|
insert into atacc1 (test,test2) values (NULL,NULL);
|
||||||
|
-- should all succeed
|
||||||
|
insert into atacc1 (test,test2) values (4,5);
|
||||||
|
insert into atacc1 (test,test2) values (5,4);
|
||||||
|
insert into atacc1 (test,test2) values (5,5);
|
||||||
|
drop table atacc1;
|
||||||
|
|
||||||
|
-- lets do some naming tests
|
||||||
|
create table atacc1 (test int, test2 int, primary key(test));
|
||||||
|
-- only first should succeed
|
||||||
|
insert into atacc1 (test2, test) values (3, 3);
|
||||||
|
insert into atacc1 (test2, test) values (2, 3);
|
||||||
|
insert into atacc1 (test2, test) values (1, NULL);
|
||||||
|
drop table atacc1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user