Thread
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Adjust some incorrect *GetDatum() macros
- ac59a90bef45 19 (unreleased) landed
-
Remove Int8GetDatum function
- d4a080b8a190 19 (unreleased) landed
-
Define DatumGetInt8 function.
Kirill Reshke <reshkekirill@gmail.com> — 2025-12-29T11:02:34Z
Hi hackers! I am currently involved in the Cloudberry kernel rebase process[0]. We are rebasing [0] which is based on pg-14 on pg-16 kernel. During this process I noticed rebase conflicts introduced by c8b2ef0. This commit defines a number of include functions for datum conversion. During this rebase resolution, I noticed that there is an Int8GetDatum function, but there is no DatumGetInt8, which I want to use. All other inline functions seem to be provided in pairs by postgres.h. So it looks convenient to define DatumGetInt8 in postgres.h? FPA doing just that. [0] https://github.com/apache/cloudberry -- Best regards, Kirill Reshke
-
Re: Define DatumGetInt8 function.
Chao Li <li.evan.chao@gmail.com> — 2025-12-29T11:08:25Z
> On Dec 29, 2025, at 19:02, Kirill Reshke <reshkekirill@gmail.com> wrote: > > Hi hackers! > > I am currently involved in the Cloudberry kernel rebase process[0]. We > are rebasing [0] which is based on pg-14 on pg-16 kernel. During this > process I noticed rebase conflicts introduced by c8b2ef0. This commit > defines a number of include functions for datum conversion. > > During this rebase resolution, I noticed that there is an Int8GetDatum > function, but there is no DatumGetInt8, which I want to use. All other > inline functions seem to be provided in pairs by postgres.h. So it > looks convenient to define DatumGetInt8 in postgres.h? > > FPA doing just that. > > > [0] https://github.com/apache/cloudberry > > -- > Best regards, > Kirill Reshke > <v1-0001-Define-DatumGetInt8-function.patch> LGTM. Best regards, -- Chao Li (Evan) HighGo Software Co., Ltd. https://www.highgo.com/
-
Re: Define DatumGetInt8 function.
Tom Lane <tgl@sss.pgh.pa.us> — 2025-12-29T15:52:58Z
Kirill Reshke <reshkekirill@gmail.com> writes: > During this rebase resolution, I noticed that there is an Int8GetDatum > function, but there is no DatumGetInt8, which I want to use. All other > inline functions seem to be provided in pairs by postgres.h. So it > looks convenient to define DatumGetInt8 in postgres.h? I would actually turn this around and ask why we have Int8GetDatum? We have no SQL types for which that is well-adapted. I see no uses of Int8GetDatum in our tree, and only three uses of UInt8GetDatum, and all three of those look like type puns to me. (heap_page_items is returning a smallint, and btcharskipsupport should be using CharGetDatum.) So from where I sit these look like an attractive nuisance that we should remove rather than encourage use of. If you have some extension data type for which these make sense, that's fine, but it doesn't mean they should be in core Postgres. regards, tom lane
-
Re: Define DatumGetInt8 function.
Kirill Reshke <reshkekirill@gmail.com> — 2025-12-29T16:01:10Z
On Mon, 29 Dec 2025 at 20:52, Tom Lane <tgl@sss.pgh.pa.us> wrote: > So from where I sit these look like an attractive nuisance that > we should remove rather than encourage use of. If you have > some extension data type for which these make sense, that's > fine, but it doesn't mean they should be in core Postgres. > > regards, tom lane Well, OK. Removal is also fine for me, because it is at least consistent. -- Best regards, Kirill Reshke
-
Re: Define DatumGetInt8 function.
David Rowley <dgrowleyml@gmail.com> — 2026-01-06T11:49:59Z
On Tue, 30 Dec 2025 at 05:01, Kirill Reshke <reshkekirill@gmail.com> wrote: > Well, OK. Removal is also fine for me, because it is at least consistent. Kirill, are you working on this patch? I've not studied in detail, but looks like it would require making char_decrement()/char_increment() and btcharskipsupport() all use CharGetDatum()/DatumGetChar() and switch to using SCHAR_MIN/SCHAR_MAX rather than 0/UCHAR_MAX. If you're not working on it, it would be good if you could withdraw the patch from the commitfest. David
-
Re: Define DatumGetInt8 function.
Kirill Reshke <reshkekirill@gmail.com> — 2026-01-06T14:12:33Z
On Tue, 6 Jan 2026 at 16:50, David Rowley <dgrowleyml@gmail.com> wrote: > > On Tue, 30 Dec 2025 at 05:01, Kirill Reshke <reshkekirill@gmail.com> wrote: > > Well, OK. Removal is also fine for me, because it is at least consistent. > > Kirill, are you working on this patch? Hi! Yes, PFA. > I've not studied in detail, > but looks like it would require making > char_decrement()/char_increment() and btcharskipsupport() all use > CharGetDatum()/DatumGetChar() and switch to using SCHAR_MIN/SCHAR_MAX > rather than 0/UCHAR_MAX. This is also a possible change, and can be a separate patch. I will try to also work on this this week. -- Best regards, Kirill Reshke
-
Re: Define DatumGetInt8 function.
Aleksander Alekseev <aleksander@tigerdata.com> — 2026-01-06T14:21:55Z
Hi, > > Kirill, are you working on this patch? > > Yes, PFA. > > > I've not studied in detail, > > but looks like it would require making > > char_decrement()/char_increment() and btcharskipsupport() all use > > CharGetDatum()/DatumGetChar() and switch to using SCHAR_MIN/SCHAR_MAX > > rather than 0/UCHAR_MAX. > > This is also a possible change, and can be a separate patch. I will > try to also work on this this week. v1 looks incomplete to me. As I understand, Tom proposed to get rid of UInt8 conversions as well. Are you going to implement this idea as well? -- Best regards, Aleksander Alekseev
-
Re: Define DatumGetInt8 function.
Kirill Reshke <reshkekirill@gmail.com> — 2026-01-06T14:27:47Z
On Tue, 6 Jan 2026 at 19:22, Aleksander Alekseev <aleksander@tigerdata.com> wrote: > > Hi, > > > > Kirill, are you working on this patch? > > > > Yes, PFA. > > > > > I've not studied in detail, > > > but looks like it would require making > > > char_decrement()/char_increment() and btcharskipsupport() all use > > > CharGetDatum()/DatumGetChar() and switch to using SCHAR_MIN/SCHAR_MAX > > > rather than 0/UCHAR_MAX. > > > > This is also a possible change, and can be a separate patch. I will > > try to also work on this this week. > > v1 looks incomplete to me. As I understand, Tom proposed to get rid of > UInt8 conversions as well. Are you going to implement this idea as > well? > Hmm, v1 looks good and self-contained to me. Like, anyway, making two commits (one for signed Int8 and one for unsigned) here is better for sake of atomicy? Anyway, I can see there are users of UInt8GetDatum, which are [0] and forks of Greenplum. So, I am not super-sure removing UInt8* is desirable. [0] https://github.com/duckdb/pg_duckdb/blob/main/src/pgduckdb_types.cpp#L230 -- Best regards, Kirill Reshke
-
Re: Define DatumGetInt8 function.
Aleksander Alekseev <aleksander@tigerdata.com> — 2026-01-07T14:03:19Z
Hi, > Hmm, v1 looks good and self-contained to me. Like, anyway, making two > commits (one for signed Int8 and one for unsigned) here is better for > sake of atomicy? > Anyway, I can see there are users of UInt8GetDatum, which are [0] and > forks of Greenplum. So, I am not super-sure removing UInt8* is > desirable. Fair enough. Let it be a separate patch then. -- Best regards, Aleksander Alekseev
-
Re: Define DatumGetInt8 function.
Peter Eisentraut <peter@eisentraut.org> — 2026-03-11T10:50:52Z
On 07.01.26 15:03, Aleksander Alekseev wrote: >> Hmm, v1 looks good and self-contained to me. Like, anyway, making two >> commits (one for signed Int8 and one for unsigned) here is better for >> sake of atomicy? >> Anyway, I can see there are users of UInt8GetDatum, which are [0] and >> forks of Greenplum. So, I am not super-sure removing UInt8* is >> desirable. > > Fair enough. Let it be a separate patch then. I have committed the first patch, which removes Int8GetDatum(). (This is actually used by my extension pguint, but that already needed to provide a replacement for the non-existent DatumGetInt8(), so it's not a bother to provide a replacement for Int8GetDatum() for future PG versions.) About the other patch, two points: 1) The changes in nbtcompare.c look a little messy with respect to signedness and unsignedness of char. I don't know what this code actually does at a higher level, but the low-level details look weird. Like, why does char_decrement() get its input value using DatumGetUInt8() but makes the return value using CharGetDatum()? And your patch changes the UCHAR_MAX to SCHAR_MAX but changes the variable from uint8 to char. First, there is no explanation why this change from unsigned to unclear-sign is correct, and second, if you are using the char type you should then also use the matching symbol CHAR_MAX. I'm tempted to think the correct direction here would be to use uint8 and its associated macros and functions more rigorously, not less. 2) The change in pageinspect looks correct, but then when you look nearby and further around, you will find that there are also a bunch of (if not most) UInt16GetDatum and UInt32GetDatum that are wrong. I think there is some confusion about what the "UIntNN" or "IntNN" in these functions refers to. Some code appears to think that this refers to the input type of that function call, but it's actually more like what SQL data type the value will be used with. (Some maybe it would be more helpful to think of it as "GetDatumForInt32" etc.) There are a lot of opportunities to clean this up, and I suspect that while many of these will work either way in practice because the actual values don't go far enough to hit the signed/unsigned boundary, I think there could a number of little bugs here to be fixed. I don't think it's worth making an isolated fix here for the one use of UInt8GetDatum(), especially if you believe my point 1) and we are not going to be removing this function anyway.
-
Re: Define DatumGetInt8 function.
Aleksander Alekseev <aleksander@tigerdata.com> — 2026-03-13T10:55:44Z
Hi Peter, Thanks for your feedback. > I'm tempted to think the correct direction here would be to use uint8 > and its associated macros and functions more rigorously, not less. OK, if my understanding is correct this leaves us char_increment() and char_decrement() which currently use DatumGetUInt8 inconsistently with CharGetDatum for the argument and return value correspondingly. > I don't think it's worth making an isolated fix here for the one use of > UInt8GetDatum() I think you meant not this particular change so I included it to the patch. We can keep nbtcompare.c as if you believe this change is not that important (it arguably isn't). > The change in pageinspect looks correct, but then when you look > nearby and further around, you will find that there are also a bunch of > (if not most) UInt16GetDatum and UInt32GetDatum that are wrong > [...] Agree. I did my best to fix all the inconsistencies in pageinsect. > There are a lot of opportunities to clean this up, and I suspect that > while many of these will work either way in practice because the actual > values don't go far enough to hit the signed/unsigned boundary, I think > there could a number of little bugs here to be fixed. I believe you were referring to places other than pageinspect. I will investigate and create separate threads with corresponding patches later. -- Best regards, Aleksander Alekseev
-
Re: Define DatumGetInt8 function.
Peter Eisentraut <peter@eisentraut.org> — 2026-03-27T12:17:15Z
On 13.03.26 11:55, Aleksander Alekseev wrote: > Hi Peter, > > Thanks for your feedback. > >> I'm tempted to think the correct direction here would be to use uint8 >> and its associated macros and functions more rigorously, not less. > > OK, if my understanding is correct this leaves us char_increment() and > char_decrement() which currently use DatumGetUInt8 inconsistently with > CharGetDatum for the argument and return value correspondingly. > >> I don't think it's worth making an isolated fix here for the one use of >> UInt8GetDatum() > > I think you meant not this particular change so I included it to the > patch. We can keep nbtcompare.c as if you believe this change is not > that important (it arguably isn't). > >> The change in pageinspect looks correct, but then when you look >> nearby and further around, you will find that there are also a bunch of >> (if not most) UInt16GetDatum and UInt32GetDatum that are wrong >> [...] > > Agree. I did my best to fix all the inconsistencies in pageinsect. > >> There are a lot of opportunities to clean this up, and I suspect that >> while many of these will work either way in practice because the actual >> values don't go far enough to hit the signed/unsigned boundary, I think >> there could a number of little bugs here to be fixed. > > I believe you were referring to places other than pageinspect. I will > investigate and create separate threads with corresponding patches > later. I'm moving this patch to the next commitfest. It's worth continuing to work on making this more correct, but AFAICT no bug has been claimed here, so it's not worth rushing this now.
-
Re: Define DatumGetInt8 function.
Michael Paquier <michael@paquier.xyz> — 2026-04-28T05:13:31Z
On Fri, Mar 27, 2026 at 01:17:15PM +0100, Peter Eisentraut wrote: > I'm moving this patch to the next commitfest. It's worth continuing to work > on making this more correct, but AFAICT no bug has been claimed here, so > it's not worth rushing this now. Well, as you have pointed out at [1], this is undoing a portion of 6dcfac9696cb that has changed a set of *GetDatum() functions to match with the C type of the variables they work on, and not the output of the function, which is incorrect. This means an open item standing on top of my head for this release, that needs to be acted on. The patch proposed at [2] handles the problem partially, unfortunately. I have spotted a lot more places where we use a *GetDatum() that does not match with the data type of the SQL function related to. In terms of locations spotted, some notes: - Of course, the.. cough.. places that 6dcfac9696cb has touched, reverted now to their original form to match the SQL data type (BRIN, pageinspect, GiST, lockfuncs.c, one in pg_buffercache). - The IndexTupleSize() business in pageinspect is a good catch. All these related to smallint, used a int32 GetDatum(). - Not completely sure about the ones in nbtcompare.c, TBH. - lockfuncs.c is much more inconsistent than I thought, even after reverting the bits of 6dcfac9696cb. pg_lock_status() was a mixed bag of incorrectness (field3 for LOCKTAG_PAGE, field3 and field4 for LOCKTAG_TUPLE, two more for PREDLOCKTAG_TUPLE). - ginlogic.c, for triConsistentFn and consistentFmgrInfo. nuserentries is a uint32, but the functions require Int32GetDatum() as use int4 for the data type. - xlogfuncs.c, pg_walfile_name_offset() should use Int32GetDatum() for xrecoff. - pg_proc.c, for pronargs and pronargdefaults. Quite an old one. - pg_logicalinspect, 4 spots for the snapshot functions. - pg_walinspect, for various record data. - pgstatindex, pending pages. In short, it took me some time to put some order into all that, finishing with the attached patch set. 0001 is the minimum for v19, that reverts 6dcfac9696cb so as we have more *GetDatum() matching with the types in the SQL functions. That would take care of the open item on top of my head. 0002 is a set of fixes that I have spotted while investigating this set of issues in depth. These spots are actually wrong, some of them for a long time. I would be slightly tempted to do something about these in v19 rather than wait for v20, as these are somewhat latent bugs, to have more consistency across the board. Has anybody from the RMT an opinion to offer? There is not much urgency in it, still.. Added the RMT in CC for opinions. [1]: https://www.postgresql.org/message-id/97f9375a-be61-4272-a44d-408337fe8fa6%40eisentraut.org [2]: https://www.postgresql.org/message-id/CAJ7c6TMcGu8qmRe1gZfJ-gOzVnZq-t%3Dfwn-UuyStx1w6ZyydMw%40mail.gmail.com -- Michael
-
Re: Define DatumGetInt8 function.
Michael Paquier <michael@paquier.xyz> — 2026-04-30T05:28:04Z
On Tue, Apr 28, 2026 at 02:13:31PM +0900, Michael Paquier wrote: > In short, it took me some time to put some order into all that, > finishing with the attached patch set. 0001 is the minimum for v19, > that reverts 6dcfac9696cb so as we have more *GetDatum() matching with > the types in the SQL functions. That would take care of the open item > on top of my head. This was not completely right after a second look. 6dcfac9696cb did not get things completely wrong, either, the brin and gist parts of the changes were right. I have undone the incorrect bits for now to address the open item. > 0002 is a set of fixes that I have spotted while investigating this > set of issues in depth. These spots are actually wrong, some of them > for a long time. I would be slightly tempted to do something about > these in v19 rather than wait for v20, as these are somewhat latent > bugs, to have more consistency across the board. Has anybody from the > RMT an opinion to offer? There is not much urgency in it, still.. > Added the RMT in CC for opinions. This deserves a different discussion, unrelated to DatumGetInt8(). I'll post that on a separate thread, for v20. -- Michael