Seamless age (xid) replacement

Started by Ivan Shershnevover 1 year ago3 messagesgeneral
Jump to latest
#1Ivan Shershnev
ivan.shershnev@jetbrains.com

Hello!

I need to use the 'age (xid)' function, but I have noticed that it is
deprecated without a clear alternative. I know that xid is also kinda
deprecated, so it makes sense not to use it. I can get xid8 from
'pg_current_xact_id()', which replaced 'txid_current()', but cannot use it
right away with 'age'.

I can cast xid8 that I've got to xid and pass to 'age', but 1) I have no
idea if it's the right way, i.e. it's promised to work or will work anyway
by accident, 2) 'age' is anyway deprecated.

I can re-implement 'age' by myself. It's (mostly) a subtraction after all.
But it would mean that I inline implementation in place of "api" function
call which is not always a great idea.

Could anyone advise, please?

Kind regards,
Ivan

#2Achilleas Mantzios
a.mantzios@cloud.gatewaynet.com
In reply to: Ivan Shershnev (#1)
Re: Seamless age (xid) replacement

On 12/4/24 17:51, Ivan Shershnev wrote:

Hello!

I need to use the 'age (xid)' function, but I have noticed that it is
deprecated without a clear alternative. I know that xid is also kinda
deprecated, so it makes sense not to use it. I can get xid8 from
'pg_current_xact_id()', which replaced 'txid_current()', but cannot
use it right away with 'age'.

I can cast xid8 that I've got to xid and pass to 'age', but 1) I have
no idea if it's the right way, i.e. it's promised to work or will work
anyway by accident, 2) 'age' is anyway deprecated.

I can re-implement 'age' by myself. It's (mostly) a subtraction after
all. But it would mean that I inline implementation in place of "api"
function call which is not always a great idea.

If I am not gravely mistaken, transaction id is still (as of pgsql 17)
kept in a 32 bit int. You can checkout the source, in the docs
(https://www.postgresql.org/docs/current/routine-vacuuming.html) it
still says we are limited to the 32 bit int. Otherwise, all of a sudden
all our VACUUM troubles would have gone away, and we would see ads and
banners and flyers all over !!, so no, it is still 32 bit.

So, you can just cast with confidence.

Regarding pgsql system functions, some arguments, return values have
turned to xid8 others remain xid, so currently this is a mix. I guess
the goal is to go full 64 bit some time in some future version.

Show quoted text

Could anyone advise, please?

Kind regards,
Ivan

#3Ivan Shershnev
ivan.shershnev@jetbrains.com
In reply to: Achilleas Mantzios (#2)
Re: Seamless age (xid) replacement

Got it. Thank you!

On Fri, Dec 20, 2024 at 9:29 AM Achilleas Mantzios - cloud <
a.mantzios@cloud.gatewaynet.com> wrote:

Show quoted text

On 12/4/24 17:51, Ivan Shershnev wrote:

Hello!

I need to use the 'age (xid)' function, but I have noticed that it is
deprecated without a clear alternative. I know that xid is also kinda
deprecated, so it makes sense not to use it. I can get xid8 from
'pg_current_xact_id()', which replaced 'txid_current()', but cannot
use it right away with 'age'.

I can cast xid8 that I've got to xid and pass to 'age', but 1) I have
no idea if it's the right way, i.e. it's promised to work or will work
anyway by accident, 2) 'age' is anyway deprecated.

I can re-implement 'age' by myself. It's (mostly) a subtraction after
all. But it would mean that I inline implementation in place of "api"
function call which is not always a great idea.

If I am not gravely mistaken, transaction id is still (as of pgsql 17)
kept in a 32 bit int. You can checkout the source, in the docs
(https://www.postgresql.org/docs/current/routine-vacuuming.html) it
still says we are limited to the 32 bit int. Otherwise, all of a sudden
all our VACUUM troubles would have gone away, and we would see ads and
banners and flyers all over !!, so no, it is still 32 bit.

So, you can just cast with confidence.

Regarding pgsql system functions, some arguments, return values have
turned to xid8 others remain xid, so currently this is a mix. I guess
the goal is to go full 64 bit some time in some future version.

Could anyone advise, please?

Kind regards,
Ivan