On 2018-10-30 16:14, Sergei Kornilov wrote:
Hi

I applied this patch on top 2fe42baf7c1ad96b5f9eb898161e258315298351
commit and found a bug while adding STORED column:

postgres=# create table test(i int);
CREATE TABLE
postgres=# insert into test values (1),(2);
INSERT 0 2
postgres=# alter table test add column gen_stored integer GENERATED
ALWAYS AS ((i * 2)) STORED;
ALTER TABLE
postgres=# alter table test add column gen_virt integer GENERATED
ALWAYS AS ((i * 2));
ALTER TABLE
postgres=# table test;
 i | gen_stored | gen_virt
---+------------+----------
 1 |            |        2
 2 |            |        4

Virtual columns was calculated on table read and its ok, but stored
column does not update table data.

This workaround is possible:

update test set i = i where gen_stored is null returning *;
 i | gen_stored | gen_virt
---+------------+----------
 1 |          2 |        2
 2 |          4 |        4
(2 rows)

table test ;
 i | gen_stored | gen_virt
---+------------+----------
 3 |          6 |        6
 4 |          8 |        8
 1 |          2 |        2
 2 |          4 |        4
(4 rows)


Hm, well, I suppose it's still a bug...


I have also noticed that logical replication isn't possible on tables with a generated column. That's a shame but I suppsoe that is as expected.


Erik Rijkers


regards, Sergei

Reply via email to