Re: Should we add xid_current() or a int8->xid cast?
Thomas Munro <thomas.munro@gmail.com>
From: Thomas Munro <thomas.munro@gmail.com>
To: Andres Freund <andres@anarazel.de>
Cc: pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2019-07-25T00:20:58Z
Lists: pgsql-hackers
On Thu, Jul 25, 2019 at 12:06 PM Andres Freund <andres@anarazel.de> wrote: > we have txid_current(), which returns an int8. But there's no convenient > way to convert that to type 'xid'. Which is fairly inconvenient, given > that we expose xids in various places. > > My current need for this was just a regression test to make sure that > system columns (xmin/xmax in particular) don't get broken again for ON > CONFLICT. But I've needed this before in other scenarios - e.g. age(xid) > can be useful to figure out how old a transaction is, but age() doesn't > work with txid_current()'s return value. > > Seems easiest to just add xid_current(), or add a cast from int8 to xid > (probably explicit?) that handles the wraparound logic correctly? Yeah, I was wondering about that. int8 isn't really the right type, since FullTransactionId is unsigned. If we had a SQL type for 64 bit xids, it should be convertible to xid, and the reverse conversion should require a more complicated dance. Of course we can't casually change txid_current() without annoying people who are using it, so perhaps if we invent a new SQL type we should also make a new function that returns it. -- Thomas Munro https://enterprisedb.com
Commits
-
Introduce xid8-based functions to replace txid_XXX.
- 4c04be9b05ad 13.0 landed
-
Add SQL type xid8 to expose FullTransactionId to users.
- aeec457de8a8 13.0 landed
-
Replace the former method of determining snapshot xmax --- to wit, calling
- 6bd4f401b0cb 8.3.0 cited