Re: BUG #17144: Upgrade from v13 to v14 with the cube extension failed

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: a(dot)kozhemyakin(at)postgrespro(dot)ru
Cc: pgsql-bugs(at)lists(dot)postgresql(dot)org
Subject: Re: BUG #17144: Upgrade from v13 to v14 with the cube extension failed
Date: 2021-08-16 16:05:53
Message-ID: 895152.1629129953@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs pgsql-hackers

PG Bug reporting form <noreply(at)postgresql(dot)org> writes:
> When trying to upgrade PostgreSQL 13 cluster with the earthdistance
> extension installed to PostgreSQL 14, I get the following error:
> psql:./update_extensions.sql:2: ERROR: type earth is already a member of
> extension "earthdistance"

Hm, thanks. This does not seem to be a problem with pg_upgrade per se;
you can reproduce it with

regression=# CREATE EXTENSION cube VERSION '1.4';
CREATE EXTENSION
regression=# CREATE EXTENSION earthdistance;
CREATE EXTENSION
regression=# ALTER EXTENSION "cube" UPDATE;
ERROR: type earth is already a member of extension "earthdistance"

The failure happens during this command in cube--1.4--1.5.sql:

ALTER TYPE cube SET ( RECEIVE = cube_recv, SEND = cube_send );

with stack trace

#0 errfinish (filename=0x9c15e3 "pg_depend.c", lineno=210,
funcname=0x9c1660 <__func__.16045> "recordDependencyOnCurrentExtension")
at elog.c:515
#1 0x000000000049886f in recordDependencyOnCurrentExtension (
object=object(at)entry=0x7ffe09f2b778, isReplace=isReplace(at)entry=true)
at pg_depend.c:206
#2 0x00000000005f65ce in GenerateTypeDependencies (
typeTuple=typeTuple(at)entry=0x2fa8f70,
typeCatalog=typeCatalog(at)entry=0x7fc882ee5970,
defaultExpr=defaultExpr(at)entry=0x0, typacl=typacl(at)entry=0x0,
relationKind=relationKind(at)entry=0 '\000',
isImplicitArray=isImplicitArray(at)entry=false, isDependentType=false,
rebuild=true) at pg_type.c:614
#3 0x000000000069519e in AlterTypeRecurse (typeOid=37834,
isImplicitArray=<optimized out>, tup=<optimized out>,
catalog=0x7fc882ee5970, atparams=0x7ffe09f2bba0) at typecmds.c:4411
#4 0x0000000000695265 in AlterTypeRecurse (typeOid=37745,
isImplicitArray=<optimized out>, tup=<optimized out>,
catalog=0x7fc882ee5970, atparams=0x7ffe09f2bba0) at typecmds.c:4488
#5 0x00000000006997f6 in AlterType (stmt=stmt(at)entry=0x2fb01f0)
at typecmds.c:4313
#6 0x00000000008340be in ProcessUtilitySlow (pstate=0x2ee2900,
pstmt=0x2ee2b88,
queryString=0x2f067b8 "/* contrib/cube/cube--1.4--1.5.sql */\n\n-- complain if script is sourced in psql, rather than via ALTER EXTENSION\n\n\n-- Remove @ and ~\nDROP OPERATOR @ (cube, cube);\nDROP OPERATOR ~ (cube, cube);\n\n-- Add"..., context=PROCESS_UTILITY_QUERY, params=0x0, queryEnv=0x0, qc=0x0,

So apparently the dependency-updating logic is a few bricks shy
of a load. The object being passed to recordDependencyOnCurrentExtension
is

(gdb) p *object
$1 = {classId = 1247, objectId = 37834, objectSubId = 0}

which sure enough is type "earth". So apparently, this code is
trying to absorb EVERYTHING that depends on type cube into the
cube extension.

[ experiments a bit more ] It might just be directly-dependent types.
If I create a table column of type cube, then nothing strange happens
during the upgrade. But if I create a domain over cube, then do the
update, the domain gets absorbed into the extension. That'd be kind
of annoying :-(

Haven't discovered exactly where it's going off the rails, though.

regards, tom lane

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Chuck Nellis 2021-08-16 16:38:46 RE: Re: psql crash when running a procedure with an inout parameter and a commit
Previous Message Tom Lane 2021-08-16 15:19:33 Re: psql crash when running a procedure with an inout parameter and a commit

Browse pgsql-hackers by date

  From Date Subject
Next Message Gurjeet Singh 2021-08-16 16:06:08 Re: Slightly improve initdb --sync-only option's help message
Previous Message Zhihong Yu 2021-08-16 15:57:12 Re: Window Function "Run Conditions"