BUG #18468: CREATE TABLE ... LIKE leaves orphaned column reference in extended statistics

The Post Office <noreply@postgresql.org>

From: PG Bug reporting form <noreply@postgresql.org>
To: pgsql-bugs@lists.postgresql.org
Cc: exclusion@gmail.com
Date: 2024-05-15T11:00:01Z
Lists: pgsql-bugs
The following bug has been logged on the website:

Bug reference:      18468
Logged by:          Alexander Lakhin
Email address:      exclusion@gmail.com
PostgreSQL version: 16.3
Operating system:   Ubuntu 22.04
Description:        

The following script:
CREATE TABLE t0 (a int, c text, b text);
CREATE STATISTICS ext_stat ON (a || b) FROM t0;
ALTER TABLE t0 DROP COLUMN c;
CREATE TABLE t1 (LIKE t0 INCLUDING ALL);

produces an invalid statistics definition:
\d+ t1
ERROR:  invalid attnum 3 for relation "t1"

SELECT stxname, stxexprs FROM pg_statistic_ext;
 ext_stat     | ({OPEXPR :opno 2780 ... {VAR :varno 1 :varattno 3 ...
 t1_expr_stat | ({OPEXPR :opno 2780 ... {VAR :varno 1 :varattno 3 ...

Though an index definition transferred correctly:
CREATE TABLE t0 (a int, c text, b text);
CREATE INDEX t_idx ON t0((a || b));
ALTER TABLE t0 DROP COLUMN c;
CREATE TABLE t1 (LIKE t0 INCLUDING ALL);
\d+ t1
...
Indexes:
    "t1_expr_idx" btree ((a || b))

SELECT relname, indexprs FROM pg_index, pg_class WHERE indexrelid = oid
  AND relname = 't1_expr_idx';
 t1_expr_idx | ({OPEXPR :opno 2780 ... {VAR :varno 1 :varattno 2 ...

Commits

  1. Fix handling of extended expression statistics in CREATE TABLE LIKE.

  2. Extended statistics on expressions