Generated columns

Peter Eisentraut <peter@eisentraut.org>

Commit: fc22b6623b6b3bab3cb057ccd282c2bfad1a0b30
Author: Peter Eisentraut <peter@eisentraut.org>
Date: 2019-03-30T07:15:57Z
Releases: 12.0
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

Files

PathChange+/−
contrib/postgres_fdw/expected/postgres_fdw.out modified +25 −0
contrib/postgres_fdw/postgres_fdw.c modified +2 −1
contrib/postgres_fdw/sql/postgres_fdw.sql modified +14 −0
doc/src/sgml/catalogs.sgml modified +16 −3
doc/src/sgml/ddl.sgml modified +118 −0
doc/src/sgml/information_schema.sgml modified +64 −2
doc/src/sgml/protocol.sgml modified +2 −2
doc/src/sgml/ref/copy.sgml modified +2 −1
doc/src/sgml/ref/create_foreign_table.sgml modified +26 −1
doc/src/sgml/ref/create_table.sgml modified +44 −1
doc/src/sgml/ref/create_trigger.sgml modified +3 −1
doc/src/sgml/textsearch.sgml modified +14 −12
doc/src/sgml/trigger.sgml modified +18 −0
src/backend/access/common/tupdesc.c modified +11 −0
src/backend/catalog/heap.c modified +95 −13
src/backend/catalog/information_schema.sql modified +26 −4
src/backend/commands/copy.c modified +30 −1
src/backend/commands/tablecmds.c modified +149 −18
src/backend/commands/trigger.c modified +25 −6
src/backend/commands/typecmds.c modified +4 −2
src/backend/executor/execMain.c modified +6 −2
src/backend/executor/execReplication.c modified +11 −0
src/backend/executor/nodeModifyTable.c modified +112 −0
src/backend/nodes/copyfuncs.c modified +2 −0
src/backend/nodes/equalfuncs.c modified +2 −0
src/backend/nodes/outfuncs.c modified +9 −0
src/backend/nodes/readfuncs.c modified +1 −0
src/backend/optimizer/plan/createplan.c modified +5 −3
src/backend/optimizer/util/inherit.c modified +6 −0
src/backend/optimizer/util/plancat.c modified +19 −0
src/backend/parser/analyze.c modified +27 −0
src/backend/parser/gram.y modified +13 −1
src/backend/parser/parse_agg.c modified +11 −0
src/backend/parser/parse_expr.c modified +6 −0
src/backend/parser/parse_func.c modified +3 −0
src/backend/parser/parse_relation.c modified +19 −0
src/backend/parser/parse_utilcmd.c modified +62 −4
src/backend/replication/logical/proto.c modified +4 −5
src/backend/replication/logical/relation.c modified +1 −1
src/backend/replication/logical/tablesync.c modified +4 −2
src/backend/replication/logical/worker.c modified +1 −1
src/backend/replication/pgoutput/pgoutput.c modified +1 −1
src/backend/rewrite/rewriteHandler.c modified +29 −7
src/backend/utils/cache/lsyscache.c modified +33 −0
src/backend/utils/cache/partcache.c modified +1 −0
src/backend/utils/cache/relcache.c modified +4 −0
src/bin/pg_dump/pg_dump.c modified +33 −7
src/bin/pg_dump/pg_dump.h modified +1 −0
src/bin/pg_dump/pg_dump_sort.c modified +10 −0
src/bin/pg_dump/t/002_pg_dump.pl modified +17 −0
src/bin/psql/describe.c modified +17 −6
src/include/access/tupdesc.h modified +1 −0
src/include/catalog/catversion.h modified +1 −1
src/include/catalog/heap.h modified +3 −1
src/include/catalog/pg_attribute.h modified +5 −0
src/include/catalog/pg_class.dat modified +1 −1
src/include/executor/nodeModifyTable.h modified +2 −0
src/include/nodes/execnodes.h modified +3 −0
src/include/nodes/parsenodes.h modified +19 −5
src/include/optimizer/plancat.h modified +2 −0
src/include/parser/kwlist.h modified +1 −0
src/include/parser/parse_node.h modified +2 −1
src/include/utils/lsyscache.h modified +1 −0
src/pl/plperl/expected/plperl_trigger.out modified +95 −0
src/pl/plperl/plperl.c modified +31 −9
src/pl/plperl/sql/plperl_trigger.sql modified +36 −0
src/pl/plpgsql/src/pl_exec.c modified +20 −0
src/pl/plpython/expected/plpython_trigger.out modified +94 −0
src/pl/plpython/plpy_cursorobject.c modified +3 −2
src/pl/plpython/plpy_exec.c modified +19 −4
src/pl/plpython/plpy_spi.c modified +2 −1
src/pl/plpython/plpy_typeio.c modified +12 −5
src/pl/plpython/plpy_typeio.h modified +1 −1
src/pl/plpython/sql/plpython_trigger.sql modified +37 −0
src/pl/tcl/expected/pltcl_trigger.out modified +99 −0
src/pl/tcl/pltcl.c modified +35 −15
src/pl/tcl/sql/pltcl_trigger.sql modified +36 −0
src/test/regress/expected/create_table_like.out modified +46 −0
src/test/regress/expected/generated.out added +768 −0
src/test/regress/parallel_schedule modified +1 −1
src/test/regress/serial_schedule modified +1 −0
src/test/regress/sql/create_table_like.sql modified +14 −0
src/test/regress/sql/generated.sql added +451 −0
src/test/subscription/t/011_generated.pl added +65 −0

Documentation touched

Discussion