Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o9Xus-0000P5-Qz for pgsql-hackers@arkaria.postgresql.org; Thu, 07 Jul 2022 20:16:02 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1o9Xuq-000736-W1 for pgsql-hackers@arkaria.postgresql.org; Thu, 07 Jul 2022 20:16:00 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o9Xuq-00072x-H3 for pgsql-hackers@lists.postgresql.org; Thu, 07 Jul 2022 20:16:00 +0000 Received: from momjian.us ([72.94.173.45]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o9Xun-00082R-Ht for pgsql-hackers@postgresql.org; Thu, 07 Jul 2022 20:15:59 +0000 Received: from bruce by momjian.us with local (Exim 4.94.2) (envelope-from ) id 1o9Xul-005JBn-Ev; Thu, 07 Jul 2022 16:15:55 -0400 Date: Thu, 7 Jul 2022 16:15:55 -0400 From: Bruce Momjian To: Robert Haas Cc: Justin Pryzby , "pgsql-hackers@postgresql.org" , Shruthi Gowda Subject: Re: pg15b2: large objects lost on upgrade Message-ID: References: <20220701231413.GI13040@telsasoft.com> <20220702154917.GM13040@telsasoft.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On Tue, Jul 5, 2022 at 12:43:54PM -0400, Robert Haas wrote: > On Sat, Jul 2, 2022 at 11:49 AM Justin Pryzby wrote: > > I suppose it's like Bruce said, here. > > > > https://www.postgresql.org/message-id/20210601140949.GC22012%40momjian.us > > Well, I feel dumb. I remember reading that email back when Bruce sent > it, but it seems that it slipped out of my head between then and when > I committed. I think your patch is fine, except that I think maybe we It happens to us all. > I had a moment of panic this morning where I thought maybe the whole Yes, I have had those panics too. > patch needed to be reverted. I was worried that we might need to > preserve the OID of every system table and index. Otherwise, what > happens if the OID counter in the old cluster wraps around and some > user-created object gets an OID that the system tables are using in > the new cluster? However, I think this can't happen, because when the > OID counter wraps around, it wraps around to 16384, and the > relfilenode values for newly created system tables and indexes are all > less than 16384. So I believe we only need to fix pg_largeobject and > its index, and I think your patch does that. So, let me explain how I look at this. There are two number-spaces, oid and relfilenode. In each number-space, there are system-assigned ones less than 16384, and higher ones for post-initdb use. What we did in pre-PG15 was to preserve only oids, and have the relfilenode match the oid, and we have discussed the negatives of this. For PG 15+, we preserve relfilenodes too. These number assignment cases only work if we handle _all_ numbering, except for non-pg_largeobject system tables. In pre-PG15, pg_largeobject was easily handled because initdb already assigned the oid and relfilenode to be the same for pg_largeobject, so a simple copy worked fine. pg_largeobject is an anomaly in PG 15 because it is assigned a relfilenode in the system number space by initdb, but then it needs to be potentially renamed into the relfilenode user number space. This is the basis for my email as already posted: https://www.postgresql.org/message-id/20210601140949.GC22012%40momjian.us You are right to be concerned since you are spanning number spaces, but I think you are fine because the relfilenode in the user-space cannot have been used since it already was being used in each database. It is true we never had a per-database rename like this before. -- Bruce Momjian https://momjian.us EDB https://enterprisedb.com Indecision is a decision. Inaction is an action. Mark Batterson