pgsql: Record dependencies of a cast on other casts that it requires.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Record dependencies of a cast on other casts that it requires.
Date: 2022-10-17 18:02:13
Message-ID: E1okURJ-002naV-9q@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Bruce Momjian 2022-10-17 19:07:31 pgsql: doc: warn pg_stat_reset() can cause vacuum/analyze problems
Previous Message Tom Lane 2022-10-17 16:14:54 pgsql: Reject non-ON-SELECT rules that are named "_RETURN".