Here is an updated patch with just the "stored" functionality, as discussed.
The actual functionality is much smaller now, contained in the executor. Everything else is mostly DDL support, trigger handling, and some frontend stuff.
probably I found a bug
create table foo(id int, name text);
insert into foo values(1, 'aaa');
alter table foo add column name_upper text generated always as (upper(name)) stored;
update foo set name = 'bbb' where id = 1; -- ok
alter table foo drop column name_upper;
update foo set name = 'bbbx' where id = 1; -- ok
alter table foo add column name_upper text generated always as (upper(name)) stored;
update foo set name = 'bbbxx' where id = 1; -- error
postgres=# update foo set name = 'bbbxx' where id = 1; -- error ERROR: no generation expression found for column number 3 of table "foo"
Regards
Pavel
-- Peter Eisentraut http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services