mirror of
https://github.com/postgres/postgres.git
synced 2025-06-11 20:28:21 +03:00
Generated columns
This is an SQL-standard feature that allows creating columns that are computed from expressions rather than assigned, similar to a view or materialized view but on a column basis. This implements one kind of generated column: stored (computed on write). Another kind, virtual (computed on read), is planned for the future, and some room is left for it. Reviewed-by: Michael Paquier <michael@paquier.xyz> Reviewed-by: Pavel Stehule <pavel.stehule@gmail.com> Discussion: https://www.postgresql.org/message-id/flat/b151f851-4019-bdb1-699e-ebab07d2f40a@2ndquadrant.com
This commit is contained in:
@ -6431,6 +6431,31 @@ select * from rem1;
|
||||
11 | bye remote
|
||||
(4 rows)
|
||||
|
||||
-- ===================================================================
|
||||
-- test generated columns
|
||||
-- ===================================================================
|
||||
create table gloc1 (a int, b int);
|
||||
alter table gloc1 set (autovacuum_enabled = 'false');
|
||||
create foreign table grem1 (
|
||||
a int,
|
||||
b int generated always as (a * 2) stored)
|
||||
server loopback options(table_name 'gloc1');
|
||||
insert into grem1 (a) values (1), (2);
|
||||
update grem1 set a = 22 where a = 2;
|
||||
select * from gloc1;
|
||||
a | b
|
||||
----+----
|
||||
1 | 2
|
||||
22 | 44
|
||||
(2 rows)
|
||||
|
||||
select * from grem1;
|
||||
a | b
|
||||
----+----
|
||||
1 | 2
|
||||
22 | 44
|
||||
(2 rows)
|
||||
|
||||
-- ===================================================================
|
||||
-- test local triggers
|
||||
-- ===================================================================
|
||||
|
@ -1644,9 +1644,10 @@ postgresPlanForeignModify(PlannerInfo *root,
|
||||
else if (operation == CMD_UPDATE)
|
||||
{
|
||||
int col;
|
||||
Bitmapset *allUpdatedCols = bms_union(rte->updatedCols, rte->extraUpdatedCols);
|
||||
|
||||
col = -1;
|
||||
while ((col = bms_next_member(rte->updatedCols, col)) >= 0)
|
||||
while ((col = bms_next_member(allUpdatedCols, col)) >= 0)
|
||||
{
|
||||
/* bit numbers are offset by FirstLowInvalidHeapAttributeNumber */
|
||||
AttrNumber attno = col + FirstLowInvalidHeapAttributeNumber;
|
||||
|
@ -1363,6 +1363,20 @@ insert into rem1(f2) values('bye remote');
|
||||
select * from loc1;
|
||||
select * from rem1;
|
||||
|
||||
-- ===================================================================
|
||||
-- test generated columns
|
||||
-- ===================================================================
|
||||
create table gloc1 (a int, b int);
|
||||
alter table gloc1 set (autovacuum_enabled = 'false');
|
||||
create foreign table grem1 (
|
||||
a int,
|
||||
b int generated always as (a * 2) stored)
|
||||
server loopback options(table_name 'gloc1');
|
||||
insert into grem1 (a) values (1), (2);
|
||||
update grem1 set a = 22 where a = 2;
|
||||
select * from gloc1;
|
||||
select * from grem1;
|
||||
|
||||
-- ===================================================================
|
||||
-- test local triggers
|
||||
-- ===================================================================
|
||||
|
Reference in New Issue
Block a user