pgsql: Record dependencies of a cast on other casts that it requires. - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Record dependencies of a cast on other casts that it requires.
Date
Msg-id E1okURJ-002naV-9q@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Record dependencies of a cast on other casts that it requires.

When creating a cast that uses a conversion function, we've
historically allowed the input and result types to be
binary-compatible with the function's input and result types,
rather than necessarily being identical.  This means that the new
cast is logically dependent on the binary-compatible cast or casts
that it references: if those are defined by pg_cast entries, and you
try to restore the new cast without having defined them, it'll fail.
Hence, we should make pg_depend entries to record these dependencies
so that pg_dump knows that there is an ordering requirement.

This is not the only place where we allow such shortcuts; aggregate
functions for example are similarly lax, and in principle should gain
similar dependencies.  However, for now it seems sufficient to fix
the cast-versus-cast case, as pg_dump's other ordering heuristics
should keep it out of trouble for other object types.

Per report from David Turoň; thanks also to Robert Haas for
preliminary investigation.  I considered back-patching, but
seeing that this issue has existed for many years without
previous reports, it's not clear it's worth the trouble.
Moreover, back-patching wouldn't be enough to ensure that the
new pg_depend entries exist in existing databases anyway.

Discussion: https://postgr.es/m/OF0A160F3E.578B15D1-ONC12588DA.003E4857-C12588DA.0045A428@notes.linuxbox.cz

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/8272749e8ca1dbbcb5f8cf5632ec26a573ac3111

Modified Files
--------------
src/backend/catalog/pg_cast.c             | 25 ++++++++++++++++++++++---
src/backend/commands/functioncmds.c       | 14 ++++++++++----
src/backend/commands/typecmds.c           |  4 +++-
src/backend/parser/parse_coerce.c         | 21 +++++++++++++++++++++
src/include/catalog/pg_cast.h             |  2 ++
src/include/parser/parse_coerce.h         |  2 ++
src/test/regress/expected/create_cast.out | 29 +++++++++++++++++++++++++++++
src/test/regress/sql/create_cast.sql      | 21 +++++++++++++++++++++
src/tools/valgrind.supp                   |  2 +-
9 files changed, 111 insertions(+), 9 deletions(-)


pgsql-committers by date:

Previous
From: Tom Lane
Date:
Subject: pgsql: Reject non-ON-SELECT rules that are named "_RETURN".
Next
From: Bruce Momjian
Date:
Subject: pgsql: doc: warn pg_stat_reset() can cause vacuum/analyze problems