Re: pg_upgrade failure due to dependencies

From: Nikhil Shetty <nikhil(dot)dba04(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Laurenz Albe <laurenz(dot)albe(at)cybertec(dot)at>, Pgsql-admin <pgsql-admin(at)lists(dot)postgresql(dot)org>
Subject: Re: pg_upgrade failure due to dependencies
Date: 2025-07-01 16:19:20
Message-ID: CAFpL5VwgA2ae3c3pvTy=-PKfpa-BxmbrmF+ryux2HdJkhRPxOA@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-admin

Yes both the extension and function are created by the extension but when
restoring, extension and associated functions or tables are created
separately and in different order .

Extension (postgis)

grep -wn postgis dbdump.list

----------------------------------------

80:7; 3079 42851433 EXTENSION - *postgis*

81:7870; 0 0 COMMENT - EXTENSION "*postgis*"

Function (st_transform) used by Extension

grep -wn st_transform dbdump.list

----------------------------------------

2180:984; 1255 42851770 FUNCTION public *st_transform*("public"."geometry",
integer) postgres

2181:8593; 0 0 COMMENT public FUNCTION "*st_transform*"("public"."geometry",
integer) postgres

2182:985; 1255 42851771 FUNCTION public *st_transform*("public"."geometry",
"text") postgres

Table (spatial_ref_sys) used by Extension

grep -wn spatial_ref_sys dbdump.list

----------------------------------------

3373:541; 1259 42851740 TABLE public *spatial_ref_sys* postgres

3374:9127; 0 0 ACL public TABLE "*spatial_ref_sys*" postgres

Table that uses the extension table

grep -wn table1 dbdump.list

----------------------------------------

3183:516; 1259 39789310 TABLE grand table1 db1

3184:9020; 0 0 ACL grand TABLE "table1" db1

As seen above from the line number (in green), 'table1' is created earlier
than table 'spatial_ref_sys' and it fails to create because of dependency.

As suggested by Jeevan in a separate thread, I tried to add this dependency
in pg_depend but the restore from pg_upgrade still fails because the
table 'spatial_ref_sys'
will be empty.

Workaround in pg_depend:

INSERT INTO pg_depend VALUES (
'pg_catalog.pg_type'::regclass::oid, 'public.geometry'::regtype::oid, 0,
'pg_catalog.pg_class'::regclass::oid, 'public.spatial_ref_sys'::regclass::
oid, 0,
'n');

Error:

pg_restore: from TOC entry 231; 1259 64892012 TABLE table1 postgres

pg_restore: error: could not execute query: ERROR: Cannot find SRID (3857)
in spatial_ref_sys

Thanks,

Nikhil

On Tue, Jul 1, 2025 at 9:00 PM Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:

> Laurenz Albe <laurenz(dot)albe(at)cybertec(dot)at> writes:
> > On Tue, 2025-07-01 at 11:23 +0530, Nikhil Shetty wrote:
> >> I was trying an upgrade from PostgreSQL 13 and PostGIS 3.1.2 TO
> PostgreSQL 15 and PostGIS 3.4.2 and got below error
> >> pg_restore: error: could not execute query: ERROR: relation
> "public.spatial_ref_sys" does not exist
> >> LINE 1: ...LECT proj4text, auth_name, auth_srid, srtext FROM
> public.spa...
> >> ^
> >> QUERY: SELECT proj4text, auth_name, auth_srid, srtext FROM
> public.spatial_ref_sys WHERE srid = 3857 LIMIT 1
>
> > The PostGIS people must be misinformed.
> > The fault is clearly theirs for marking the function
> st_transform(geometry, text, integer) as IMMUTABLE:
>
> That's clearly pretty risky, but I don't understand the context here.
> pg_dump always restores extensions first. Surely both this function
> and the spatial_ref_sys table would be created by the PostGIS
> extension(s)?
>
> regards, tom lane
>

In response to

Responses

Browse pgsql-admin by date

  From Date Subject
Next Message Nikhil Shetty 2025-07-01 16:20:56 Re: pg_upgrade failure due to dependencies
Previous Message Tom Lane 2025-07-01 15:30:02 Re: pg_upgrade failure due to dependencies