mirror of
https://github.com/postgres/postgres.git
synced 2025-05-05 09:19:17 +03:00
Need to do CommandCounterIncrement after StoreAttrMissingVal.
Without this, an additional change to the same pg_attribute row within the same command will fail. This is possible at least with ALTER TABLE ADD COLUMN on a multiple-inheritance-pathway structure. (Another potential hazard is that immediately-following operations might not see the missingval.) Introduced by 95f650674, which split the former coding that used a single pg_attribute update to change both atthasdef and atthasmissing/attmissingval into two updates, but missed that this should entail two CommandCounterIncrements as well. Like that fix, back-patch through v13. Reported-by: Alexander Lakhin <exclusion@gmail.com> Author: Tender Wang <tndrwang@gmail.com> Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://postgr.es/m/025a3ffa-5eff-4a88-97fb-8f583b015965@gmail.com Backpatch-through: 13
This commit is contained in:
parent
b19893b94b
commit
0941aadcd5
@ -7345,6 +7345,8 @@ ATExecAddColumn(List **wqueue, AlteredTableInfo *tab, Relation rel,
|
|||||||
if (!missingIsNull)
|
if (!missingIsNull)
|
||||||
{
|
{
|
||||||
StoreAttrMissingVal(rel, attribute->attnum, missingval);
|
StoreAttrMissingVal(rel, attribute->attnum, missingval);
|
||||||
|
/* Make the additional catalog change visible */
|
||||||
|
CommandCounterIncrement();
|
||||||
has_missing = true;
|
has_missing = true;
|
||||||
}
|
}
|
||||||
FreeExecutorState(estate);
|
FreeExecutorState(estate);
|
||||||
|
@ -1093,17 +1093,30 @@ CREATE TABLE inhta ();
|
|||||||
CREATE TABLE inhtb () INHERITS (inhta);
|
CREATE TABLE inhtb () INHERITS (inhta);
|
||||||
CREATE TABLE inhtc () INHERITS (inhtb);
|
CREATE TABLE inhtc () INHERITS (inhtb);
|
||||||
CREATE TABLE inhtd () INHERITS (inhta, inhtb, inhtc);
|
CREATE TABLE inhtd () INHERITS (inhta, inhtb, inhtc);
|
||||||
ALTER TABLE inhta ADD COLUMN i int;
|
ALTER TABLE inhta ADD COLUMN i int, ADD COLUMN j bigint DEFAULT 1;
|
||||||
NOTICE: merging definition of column "i" for child "inhtd"
|
NOTICE: merging definition of column "i" for child "inhtd"
|
||||||
NOTICE: merging definition of column "i" for child "inhtd"
|
NOTICE: merging definition of column "i" for child "inhtd"
|
||||||
|
NOTICE: merging definition of column "j" for child "inhtd"
|
||||||
|
NOTICE: merging definition of column "j" for child "inhtd"
|
||||||
\d+ inhta
|
\d+ inhta
|
||||||
Table "public.inhta"
|
Table "public.inhta"
|
||||||
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
|
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
|
||||||
--------+---------+-----------+----------+---------+---------+--------------+-------------
|
--------+---------+-----------+----------+---------+---------+--------------+-------------
|
||||||
i | integer | | | | plain | |
|
i | integer | | | | plain | |
|
||||||
|
j | bigint | | | 1 | plain | |
|
||||||
Child tables: inhtb,
|
Child tables: inhtb,
|
||||||
inhtd
|
inhtd
|
||||||
|
|
||||||
|
\d+ inhtd
|
||||||
|
Table "public.inhtd"
|
||||||
|
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
|
||||||
|
--------+---------+-----------+----------+---------+---------+--------------+-------------
|
||||||
|
i | integer | | | | plain | |
|
||||||
|
j | bigint | | | 1 | plain | |
|
||||||
|
Inherits: inhta,
|
||||||
|
inhtb,
|
||||||
|
inhtc
|
||||||
|
|
||||||
DROP TABLE inhta, inhtb, inhtc, inhtd;
|
DROP TABLE inhta, inhtb, inhtc, inhtd;
|
||||||
-- Test for renaming in diamond inheritance
|
-- Test for renaming in diamond inheritance
|
||||||
CREATE TABLE inht2 (x int) INHERITS (inht1);
|
CREATE TABLE inht2 (x int) INHERITS (inht1);
|
||||||
|
@ -377,8 +377,9 @@ CREATE TABLE inhta ();
|
|||||||
CREATE TABLE inhtb () INHERITS (inhta);
|
CREATE TABLE inhtb () INHERITS (inhta);
|
||||||
CREATE TABLE inhtc () INHERITS (inhtb);
|
CREATE TABLE inhtc () INHERITS (inhtb);
|
||||||
CREATE TABLE inhtd () INHERITS (inhta, inhtb, inhtc);
|
CREATE TABLE inhtd () INHERITS (inhta, inhtb, inhtc);
|
||||||
ALTER TABLE inhta ADD COLUMN i int;
|
ALTER TABLE inhta ADD COLUMN i int, ADD COLUMN j bigint DEFAULT 1;
|
||||||
\d+ inhta
|
\d+ inhta
|
||||||
|
\d+ inhtd
|
||||||
DROP TABLE inhta, inhtb, inhtc, inhtd;
|
DROP TABLE inhta, inhtb, inhtc, inhtd;
|
||||||
|
|
||||||
-- Test for renaming in diamond inheritance
|
-- Test for renaming in diamond inheritance
|
||||||
|
Loading…
x
Reference in New Issue
Block a user