Lists: | pgsql-hackers |
---|
From: | Peter Eisentraut <peter(dot)eisentraut(at)2ndquadrant(dot)com> |
---|---|
To: | pgsql-hackers <pgsql-hackers(at)postgresql(dot)org> |
Cc: | Magnus Hagander <magnus(at)hagander(dot)net> |
Subject: | pg_basebackup fails on databases with high OIDs |
Date: | 2020-01-06 08:07:26 |
Message-ID: | dea47fc8-6c89-a2b1-07e3-754ff1ab094b@2ndquadrant.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-hackers |
This is a new bug in PG12. When you have a database with an OID above
INT32_MAX (signed), then pg_basebackup fails thus:
pg_basebackup: error: could not get write-ahead log end position from
server: ERROR: value "3000000000" is out of range for type integer
The cause appears to be commit 6b9e875f7286d8535bff7955e5aa3602e188e436.
A possible fix is attached. An alternative to using
OidInputFunctionCall() would be exporting something like oidin_subr().
--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
Attachment | Content-Type | Size |
---|---|---|
0001-Fix-base-backup-with-database-OIDs-larger-than-INT32.patch | text/plain | 1.2 KB |
From: | Michael Paquier <michael(at)paquier(dot)xyz> |
---|---|
To: | Peter Eisentraut <peter(dot)eisentraut(at)2ndquadrant(dot)com> |
Cc: | pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>, Magnus Hagander <magnus(at)hagander(dot)net> |
Subject: | Re: pg_basebackup fails on databases with high OIDs |
Date: | 2020-01-06 08:20:53 |
Message-ID: | 20200106082053.GX3598@paquier.xyz |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-hackers |
On Mon, Jan 06, 2020 at 09:07:26AM +0100, Peter Eisentraut wrote:
> This is a new bug in PG12. When you have a database with an OID above
> INT32_MAX (signed), then pg_basebackup fails thus:
Yep. Introduced by 6b9e875.
> pg_basebackup: error: could not get write-ahead log end position from
> server: ERROR: value "3000000000" is out of range for type integer
>
> The cause appears to be commit 6b9e875f7286d8535bff7955e5aa3602e188e436.
>
> A possible fix is attached. An alternative to using OidInputFunctionCall()
> would be exporting something like oidin_subr().
I think that you would save yourself from a lot of trouble if you do
the latter with a subroutine. Not quite like that based on the
process context where the call is done, but remember 21f428eb..
--
Michael
From: | Julien Rouhaud <rjuju123(at)gmail(dot)com> |
---|---|
To: | Michael Paquier <michael(at)paquier(dot)xyz> |
Cc: | Peter Eisentraut <peter(dot)eisentraut(at)2ndquadrant(dot)com>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>, Magnus Hagander <magnus(at)hagander(dot)net> |
Subject: | Re: pg_basebackup fails on databases with high OIDs |
Date: | 2020-01-06 08:31:28 |
Message-ID: | CAOBaU_bNB5_-6XHdebsPrrX29v-=WqMMaiPnNsjQmpjvw+QH3g@mail.gmail.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-hackers |
On Mon, Jan 6, 2020 at 9:21 AM Michael Paquier <michael(at)paquier(dot)xyz> wrote:
>
> On Mon, Jan 06, 2020 at 09:07:26AM +0100, Peter Eisentraut wrote:
> > This is a new bug in PG12. When you have a database with an OID above
> > INT32_MAX (signed), then pg_basebackup fails thus:
>
> Yep. Introduced by 6b9e875.
Indeed.
> > pg_basebackup: error: could not get write-ahead log end position from
> > server: ERROR: value "3000000000" is out of range for type integer
> >
> > The cause appears to be commit 6b9e875f7286d8535bff7955e5aa3602e188e436.
> >
> > A possible fix is attached. An alternative to using OidInputFunctionCall()
> > would be exporting something like oidin_subr().
>
> I think that you would save yourself from a lot of trouble if you do
> the latter with a subroutine. Not quite like that based on the
> process context where the call is done, but remember 21f428eb..
+0.5 to avoid calling OidInputFunctionCall()
From: | Magnus Hagander <magnus(at)hagander(dot)net> |
---|---|
To: | Julien Rouhaud <rjuju123(at)gmail(dot)com> |
Cc: | Michael Paquier <michael(at)paquier(dot)xyz>, Peter Eisentraut <peter(dot)eisentraut(at)2ndquadrant(dot)com>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: pg_basebackup fails on databases with high OIDs |
Date: | 2020-01-06 20:00:31 |
Message-ID: | CABUevEzu1wq0Y7PF+U7wffZiR4Oy0Xh9D8DP9J-gFrLs9=viSQ@mail.gmail.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-hackers |
On Mon, Jan 6, 2020 at 9:31 AM Julien Rouhaud <rjuju123(at)gmail(dot)com> wrote:
>
> On Mon, Jan 6, 2020 at 9:21 AM Michael Paquier <michael(at)paquier(dot)xyz> wrote:
> >
> > On Mon, Jan 06, 2020 at 09:07:26AM +0100, Peter Eisentraut wrote:
> > > This is a new bug in PG12. When you have a database with an OID above
> > > INT32_MAX (signed), then pg_basebackup fails thus:
> >
> > Yep. Introduced by 6b9e875.
>
> Indeed.
Yeah, clearly :/
> > > pg_basebackup: error: could not get write-ahead log end position from
> > > server: ERROR: value "3000000000" is out of range for type integer
> > >
> > > The cause appears to be commit 6b9e875f7286d8535bff7955e5aa3602e188e436.
> > >
> > > A possible fix is attached. An alternative to using OidInputFunctionCall()
> > > would be exporting something like oidin_subr().
> >
> > I think that you would save yourself from a lot of trouble if you do
> > the latter with a subroutine. Not quite like that based on the
> > process context where the call is done, but remember 21f428eb..
>
> +0.5 to avoid calling OidInputFunctionCall()
Or just directly using atol() instead of atoi()? Well maybe not
directly but in a small wrapper that verifies it's not bigger than an
unsigned?
Unlike in cases where we use oidin etc, we are dealing with data that
is "mostly trusted" here, aren't we? Meaning we could call atol() on
it, and throw an error if it overflows, and be done with it?
Subdirectories in the data directory aren't exactly "untrusted enduser
data"...
I agree with the feelings that calling OidInputFunctionCall() from
this context leaves me slightly irked.
--
Magnus Hagander
Me: https://www.hagander.net/
Work: https://www.redpill-linpro.com/
From: | Peter Eisentraut <peter(dot)eisentraut(at)2ndquadrant(dot)com> |
---|---|
To: | Magnus Hagander <magnus(at)hagander(dot)net>, Julien Rouhaud <rjuju123(at)gmail(dot)com> |
Cc: | Michael Paquier <michael(at)paquier(dot)xyz>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: pg_basebackup fails on databases with high OIDs |
Date: | 2020-01-11 07:21:11 |
Message-ID: | 304f2314-099d-8c30-7b06-c6a1c9076fca@2ndquadrant.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-hackers |
On 2020-01-06 21:00, Magnus Hagander wrote:
>> +0.5 to avoid calling OidInputFunctionCall()
>
> Or just directly using atol() instead of atoi()? Well maybe not
> directly but in a small wrapper that verifies it's not bigger than an
> unsigned?
>
> Unlike in cases where we use oidin etc, we are dealing with data that
> is "mostly trusted" here, aren't we? Meaning we could call atol() on
> it, and throw an error if it overflows, and be done with it?
> Subdirectories in the data directory aren't exactly "untrusted enduser
> data"...
Yeah, it looks like we are using strtoul() without additional error
checking in similar situations, so here is a patch doing it like that.
--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
Attachment | Content-Type | Size |
---|---|---|
v2-0001-Fix-base-backup-with-database-OIDs-larger-than-IN.patch | text/plain | 1.3 KB |
From: | Julien Rouhaud <rjuju123(at)gmail(dot)com> |
---|---|
To: | Peter Eisentraut <peter(dot)eisentraut(at)2ndquadrant(dot)com> |
Cc: | Magnus Hagander <magnus(at)hagander(dot)net>, Michael Paquier <michael(at)paquier(dot)xyz>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: pg_basebackup fails on databases with high OIDs |
Date: | 2020-01-11 16:44:37 |
Message-ID: | 20200111164437.GB56190@nol |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-hackers |
On Sat, Jan 11, 2020 at 08:21:11AM +0100, Peter Eisentraut wrote:
> On 2020-01-06 21:00, Magnus Hagander wrote:
> > > +0.5 to avoid calling OidInputFunctionCall()
> >
> > Or just directly using atol() instead of atoi()? Well maybe not
> > directly but in a small wrapper that verifies it's not bigger than an
> > unsigned?
> >
> > Unlike in cases where we use oidin etc, we are dealing with data that
> > is "mostly trusted" here, aren't we? Meaning we could call atol() on
> > it, and throw an error if it overflows, and be done with it?
> > Subdirectories in the data directory aren't exactly "untrusted enduser
> > data"...
>
> Yeah, it looks like we are using strtoul() without additional error checking
> in similar situations, so here is a patch doing it like that.
> - true, isDbDir ? pg_atoi(lastDir + 1, sizeof(Oid), 0) : InvalidOid);
> + true, isDbDir ? (Oid) strtoul(lastDir + 1, NULL, 10) : InvalidOid);
Looking at some other code, I just discovered the atooid() macro that already
does the same, maybe it'd be better for consistency to use that instead?
From: | Magnus Hagander <magnus(at)hagander(dot)net> |
---|---|
To: | Julien Rouhaud <rjuju123(at)gmail(dot)com> |
Cc: | Peter Eisentraut <peter(dot)eisentraut(at)2ndquadrant(dot)com>, Michael Paquier <michael(at)paquier(dot)xyz>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: pg_basebackup fails on databases with high OIDs |
Date: | 2020-01-11 16:47:41 |
Message-ID: | CABUevEyO2u3Mo_BH+SmMEAJbywWpb7=HLTB3d1iyCaXZ43mGsQ@mail.gmail.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-hackers |
On Sat, Jan 11, 2020 at 5:44 PM Julien Rouhaud <rjuju123(at)gmail(dot)com> wrote:
>
> On Sat, Jan 11, 2020 at 08:21:11AM +0100, Peter Eisentraut wrote:
> > On 2020-01-06 21:00, Magnus Hagander wrote:
> > > > +0.5 to avoid calling OidInputFunctionCall()
> > >
> > > Or just directly using atol() instead of atoi()? Well maybe not
> > > directly but in a small wrapper that verifies it's not bigger than an
> > > unsigned?
> > >
> > > Unlike in cases where we use oidin etc, we are dealing with data that
> > > is "mostly trusted" here, aren't we? Meaning we could call atol() on
> > > it, and throw an error if it overflows, and be done with it?
> > > Subdirectories in the data directory aren't exactly "untrusted enduser
> > > data"...
> >
> > Yeah, it looks like we are using strtoul() without additional error checking
> > in similar situations, so here is a patch doing it like that.
>
> > - true, isDbDir ? pg_atoi(lastDir + 1, sizeof(Oid), 0) : InvalidOid);
> > + true, isDbDir ? (Oid) strtoul(lastDir + 1, NULL, 10) : InvalidOid);
>
> Looking at some other code, I just discovered the atooid() macro that already
> does the same, maybe it'd be better for consistency to use that instead?
+1. Whie it does the same thing, consistency is good! :)
--
Magnus Hagander
Me: https://www.hagander.net/
Work: https://www.redpill-linpro.com/
From: | Peter Eisentraut <peter(dot)eisentraut(at)2ndquadrant(dot)com> |
---|---|
To: | Magnus Hagander <magnus(at)hagander(dot)net>, Julien Rouhaud <rjuju123(at)gmail(dot)com> |
Cc: | Michael Paquier <michael(at)paquier(dot)xyz>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: pg_basebackup fails on databases with high OIDs |
Date: | 2020-01-13 12:49:35 |
Message-ID: | 36af18b2-b7ca-7f2d-00f1-8840c2cc8599@2ndquadrant.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-hackers |
On 2020-01-11 17:47, Magnus Hagander wrote:
> On Sat, Jan 11, 2020 at 5:44 PM Julien Rouhaud <rjuju123(at)gmail(dot)com> wrote:
>>
>> On Sat, Jan 11, 2020 at 08:21:11AM +0100, Peter Eisentraut wrote:
>>> On 2020-01-06 21:00, Magnus Hagander wrote:
>>>>> +0.5 to avoid calling OidInputFunctionCall()
>>>>
>>>> Or just directly using atol() instead of atoi()? Well maybe not
>>>> directly but in a small wrapper that verifies it's not bigger than an
>>>> unsigned?
>>>>
>>>> Unlike in cases where we use oidin etc, we are dealing with data that
>>>> is "mostly trusted" here, aren't we? Meaning we could call atol() on
>>>> it, and throw an error if it overflows, and be done with it?
>>>> Subdirectories in the data directory aren't exactly "untrusted enduser
>>>> data"...
>>>
>>> Yeah, it looks like we are using strtoul() without additional error checking
>>> in similar situations, so here is a patch doing it like that.
>>
>>> - true, isDbDir ? pg_atoi(lastDir + 1, sizeof(Oid), 0) : InvalidOid);
>>> + true, isDbDir ? (Oid) strtoul(lastDir + 1, NULL, 10) : InvalidOid);
>>
>> Looking at some other code, I just discovered the atooid() macro that already
>> does the same, maybe it'd be better for consistency to use that instead?
>
> +1. Whie it does the same thing, consistency is good! :)
committed
--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
From: | Julien Rouhaud <rjuju123(at)gmail(dot)com> |
---|---|
To: | Peter Eisentraut <peter(dot)eisentraut(at)2ndquadrant(dot)com> |
Cc: | Magnus Hagander <magnus(at)hagander(dot)net>, Michael Paquier <michael(at)paquier(dot)xyz>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: pg_basebackup fails on databases with high OIDs |
Date: | 2020-01-13 13:07:06 |
Message-ID: | CAOBaU_YyVSmLDLNJo9HKHAy-jYYmnjzThQ8c7E8NfcL3CAMgSg@mail.gmail.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Lists: | pgsql-hackers |
On Mon, Jan 13, 2020 at 1:49 PM Peter Eisentraut
<peter(dot)eisentraut(at)2ndquadrant(dot)com> wrote:
>
> On 2020-01-11 17:47, Magnus Hagander wrote:
> > On Sat, Jan 11, 2020 at 5:44 PM Julien Rouhaud <rjuju123(at)gmail(dot)com> wrote:
> >>
> >> On Sat, Jan 11, 2020 at 08:21:11AM +0100, Peter Eisentraut wrote:
> >>> On 2020-01-06 21:00, Magnus Hagander wrote:
> >>>>> +0.5 to avoid calling OidInputFunctionCall()
> >>>>
> >>>> Or just directly using atol() instead of atoi()? Well maybe not
> >>>> directly but in a small wrapper that verifies it's not bigger than an
> >>>> unsigned?
> >>>>
> >>>> Unlike in cases where we use oidin etc, we are dealing with data that
> >>>> is "mostly trusted" here, aren't we? Meaning we could call atol() on
> >>>> it, and throw an error if it overflows, and be done with it?
> >>>> Subdirectories in the data directory aren't exactly "untrusted enduser
> >>>> data"...
> >>>
> >>> Yeah, it looks like we are using strtoul() without additional error checking
> >>> in similar situations, so here is a patch doing it like that.
> >>
> >>> - true, isDbDir ? pg_atoi(lastDir + 1, sizeof(Oid), 0) : InvalidOid);
> >>> + true, isDbDir ? (Oid) strtoul(lastDir + 1, NULL, 10) : InvalidOid);
> >>
> >> Looking at some other code, I just discovered the atooid() macro that already
> >> does the same, maybe it'd be better for consistency to use that instead?
> >
> > +1. Whie it does the same thing, consistency is good! :)
>
> committed
Thanks!