Fix several DDL issues of generated columns versus inheritance
authorPeter Eisentraut <peter@eisentraut.org>
Wed, 6 May 2020 14:25:54 +0000 (16:25 +0200)
committerPeter Eisentraut <peter@eisentraut.org>
Fri, 8 May 2020 09:31:57 +0000 (11:31 +0200)
commit086ffddf3656fb3d24d9a73ce36cb1102e42cc90
treee2907fe4913872e4917c0af187b1b70e804e8bc1
parent501e41dd3cb945287fdcfe25e8906e79872fcc44
Fix several DDL issues of generated columns versus inheritance

Several combinations of generated columns and inheritance in CREATE
TABLE were not handled correctly.  Specifically:

- Disallow a child column specifying a generation expression if the
  parent column is a generated column.  The child column definition
  must be unadorned and the parent column's generation expression will
  be copied.

- Prohibit a child column of a generated parent column specifying
  default values or identity.

- Allow a child column of a not-generated parent column specifying
  itself as a generated column.  This previously did not work, but it
  was possible to arrive at the state via other means (involving ALTER
  TABLE), so it seems sensible to support it.

Add tests for each case.  Also add documentation about the rules
involving generated columns and inheritance.

Discussion:
    https://www.postgresql.org/message-id/flat/15830.1575468847%40sss.pgh.pa.us
    https://www.postgresql.org/message-id/flat/2678bad1-048f-519a-ef24-b12962f41807%40enterprisedb.com
    https://www.postgresql.org/message-id/flat/CAJvUf_u4h0DxkCMCeEKAWCuzGUTnDP-G5iVmSwxLQSXn0_FWNQ%40mail.gmail.com
doc/src/sgml/ddl.sgml
src/backend/commands/tablecmds.c
src/test/regress/expected/generated.out
src/test/regress/sql/generated.sql