The attached patch adds regression tests for setting and removing
default values using ALTER TABLE, on both views and tables. (You'll need to apply the default-values-for-views patch that I sent to -patches earlier for the regression tests to pass.) Neil Conway <neilconway@rogers.com>
This commit is contained in:
parent
7f459808de
commit
fbc4b7110f
@ -681,3 +681,59 @@ insert into child (a, b) values (NULL, 'foo');
|
||||
ERROR: ExecAppend: Fail to add null value in not null attribute a
|
||||
drop table child;
|
||||
drop table parent;
|
||||
-- test setting and removing default values
|
||||
create table def_test (
|
||||
c1 int4 default 5,
|
||||
c2 text default 'initial_default'
|
||||
);
|
||||
insert into def_test default values;
|
||||
alter table def_test alter column c1 drop default;
|
||||
insert into def_test default values;
|
||||
alter table def_test alter column c2 drop default;
|
||||
insert into def_test default values;
|
||||
alter table def_test alter column c1 set default 10;
|
||||
alter table def_test alter column c2 set default 'new_default';
|
||||
insert into def_test default values;
|
||||
select * from def_test;
|
||||
c1 | c2
|
||||
----+-----------------
|
||||
5 | initial_default
|
||||
| initial_default
|
||||
|
|
||||
10 | new_default
|
||||
(4 rows)
|
||||
|
||||
-- set defaults to an incorrect type: this should fail
|
||||
alter table def_test alter column c1 set default 'wrong_datatype';
|
||||
ERROR: pg_atoi: error in "wrong_datatype": can't parse "wrong_datatype"
|
||||
alter table def_test alter column c2 set default 20;
|
||||
-- set defaults on a non-existent column: this should fail
|
||||
alter table def_test alter column c3 set default 30;
|
||||
ERROR: ALTER TABLE: relation "def_test" has no column "c3"
|
||||
-- set defaults on views: we need to create a view, add a rule
|
||||
-- to allow insertions into it, and then alter the view to add
|
||||
-- a default
|
||||
create view def_view_test as select * from def_test;
|
||||
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;
|
||||
alter table def_view_test alter column c1 set default 45;
|
||||
insert into def_view_test default values;
|
||||
alter table def_view_test alter column c2 set default 'view_default';
|
||||
insert into def_view_test default values;
|
||||
select * from def_view_test;
|
||||
c1 | c2
|
||||
----+-----------------
|
||||
5 | initial_default
|
||||
| initial_default
|
||||
|
|
||||
10 | new_default
|
||||
|
|
||||
45 |
|
||||
45 | view_default
|
||||
(7 rows)
|
||||
|
||||
drop rule def_view_test_ins;
|
||||
drop view def_view_test;
|
||||
drop table def_test;
|
||||
|
@ -532,3 +532,42 @@ insert into child (a, b) values (NULL, 'foo');
|
||||
drop table child;
|
||||
drop table parent;
|
||||
|
||||
-- test setting and removing default values
|
||||
create table def_test (
|
||||
c1 int4 default 5,
|
||||
c2 text default 'initial_default'
|
||||
);
|
||||
insert into def_test default values;
|
||||
alter table def_test alter column c1 drop default;
|
||||
insert into def_test default values;
|
||||
alter table def_test alter column c2 drop default;
|
||||
insert into def_test default values;
|
||||
alter table def_test alter column c1 set default 10;
|
||||
alter table def_test alter column c2 set default 'new_default';
|
||||
insert into def_test default values;
|
||||
select * from def_test;
|
||||
|
||||
-- set defaults to an incorrect type: this should fail
|
||||
alter table def_test alter column c1 set default 'wrong_datatype';
|
||||
alter table def_test alter column c2 set default 20;
|
||||
|
||||
-- set defaults on a non-existent column: this should fail
|
||||
alter table def_test alter column c3 set default 30;
|
||||
|
||||
-- set defaults on views: we need to create a view, add a rule
|
||||
-- to allow insertions into it, and then alter the view to add
|
||||
-- a default
|
||||
create view def_view_test as select * from def_test;
|
||||
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;
|
||||
alter table def_view_test alter column c1 set default 45;
|
||||
insert into def_view_test default values;
|
||||
alter table def_view_test alter column c2 set default 'view_default';
|
||||
insert into def_view_test default values;
|
||||
select * from def_view_test;
|
||||
|
||||
drop rule def_view_test_ins;
|
||||
drop view def_view_test;
|
||||
drop table def_test;
|
||||
|
Loading…
x
Reference in New Issue
Block a user