mirror of
https://github.com/postgres/postgres.git
synced 2025-04-24 10:47:04 +03:00
Fix alter_table.sql test case to test what it claims to.
The stanza "SET STORAGE may need to add a TOAST table" does not test what it's supposed to, and hasn't done so since we added the ability to store constant column default values as metadata. We need to use a non-constant default to get the expected table rewrite to actually happen. Fix that, and add the missing checks that would have exposed the problem to begin with. Noted while reviewing a patch that made changes in this test case. Back-patch to v11 where the problem came in.
This commit is contained in:
parent
36e545cd05
commit
b158e0b1b1
@ -2245,12 +2245,26 @@ alter table recur1 alter column f2 type recur2; -- fails
|
||||
ERROR: composite type recur1 cannot be made a member of itself
|
||||
-- SET STORAGE may need to add a TOAST table
|
||||
create table test_storage (a text, c text storage plain);
|
||||
select reltoastrelid <> 0 as has_toast_table
|
||||
from pg_class where oid = 'test_storage'::regclass;
|
||||
has_toast_table
|
||||
-----------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
alter table test_storage alter a set storage plain;
|
||||
alter table test_storage add b int default 0; -- rewrite table to remove its TOAST table
|
||||
-- rewrite table to remove its TOAST table; need a non-constant column default
|
||||
alter table test_storage add b int default random()::int;
|
||||
select reltoastrelid <> 0 as has_toast_table
|
||||
from pg_class where oid = 'test_storage'::regclass;
|
||||
has_toast_table
|
||||
-----------------
|
||||
f
|
||||
(1 row)
|
||||
|
||||
alter table test_storage alter a set storage extended; -- re-add TOAST table
|
||||
select reltoastrelid <> 0 as has_toast_table
|
||||
from pg_class
|
||||
where oid = 'test_storage'::regclass;
|
||||
from pg_class where oid = 'test_storage'::regclass;
|
||||
has_toast_table
|
||||
-----------------
|
||||
t
|
||||
@ -2265,10 +2279,10 @@ alter table test_storage alter column a set storage external;
|
||||
\d+ test_storage
|
||||
Table "public.test_storage"
|
||||
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
|
||||
--------+---------+-----------+----------+---------+----------+--------------+-------------
|
||||
--------+---------+-----------+----------+-------------------+----------+--------------+-------------
|
||||
a | text | | | | external | |
|
||||
c | text | | | | plain | |
|
||||
b | integer | | | 0 | plain | |
|
||||
b | integer | | | random()::integer | plain | |
|
||||
Indexes:
|
||||
"test_storage_idx" btree (b, a)
|
||||
|
||||
|
@ -1528,13 +1528,16 @@ alter table recur1 alter column f2 type recur2; -- fails
|
||||
|
||||
-- SET STORAGE may need to add a TOAST table
|
||||
create table test_storage (a text, c text storage plain);
|
||||
alter table test_storage alter a set storage plain;
|
||||
alter table test_storage add b int default 0; -- rewrite table to remove its TOAST table
|
||||
alter table test_storage alter a set storage extended; -- re-add TOAST table
|
||||
|
||||
select reltoastrelid <> 0 as has_toast_table
|
||||
from pg_class
|
||||
where oid = 'test_storage'::regclass;
|
||||
from pg_class where oid = 'test_storage'::regclass;
|
||||
alter table test_storage alter a set storage plain;
|
||||
-- rewrite table to remove its TOAST table; need a non-constant column default
|
||||
alter table test_storage add b int default random()::int;
|
||||
select reltoastrelid <> 0 as has_toast_table
|
||||
from pg_class where oid = 'test_storage'::regclass;
|
||||
alter table test_storage alter a set storage extended; -- re-add TOAST table
|
||||
select reltoastrelid <> 0 as has_toast_table
|
||||
from pg_class where oid = 'test_storage'::regclass;
|
||||
|
||||
-- check STORAGE correctness
|
||||
create table test_storage_failed (a text, b int storage extended);
|
||||
|
Loading…
x
Reference in New Issue
Block a user