Re: Global temporary tables

From: Konstantin Knizhnik <k(dot)knizhnik(at)postgrespro(dot)ru>
To: Craig Ringer <craig(at)2ndquadrant(dot)com>
Cc: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Global temporary tables
Date: 2019-08-16 11:21:36
Message-ID: b99de38c-baf3-91fa-58b9-8fdbae7dff4d@postgrespro.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 16.08.2019 11:37, Craig Ringer wrote:
>
>
> On Fri, 16 Aug 2019 at 15:30, Konstantin Knizhnik
> <k(dot)knizhnik(at)postgrespro(dot)ru <mailto:k(dot)knizhnik(at)postgrespro(dot)ru>> wrote:
>
> I forget or do not notice some of your questions, would you be
> so kind as to repeat them?
>
>
> Sent early by accident.
>
> Repeating questions:

Sorry, but I have answered them (my e-mail from 13.08)!
Looks like you have looed at wrong version of the patch:
global_shared_temp-1.patch instead of global_private_temp-1.patch which
implements global tables accessed through local buffers.

>
>
> Why do you need to do all this indirection with changing RelFileNode
> to RelFileNodeBackend in the bufmgr, changing BufferGetTag etc?
> Similarly, your changes of RelFileNodeBackendIsTemp
> to RelFileNodeBackendIsLocalTemp . I'm guessing you did it the way you
> did instead to lay the groundwork for cross-backend sharing, but if so
> it should IMO be in your second patch that adds support for using
> shared_buffers for temp tables, not in the first patch that adds a
> minimal global temp tables implementation. Maybe my understanding of
> the existing temp table mechanics is just insufficient as I
> see RelFileNodeBackendIsTemp is already used in some aspects of
> existing temp relation handling.
>

Sorry, are you really speaking about global_private_temp-1.patch?
This patch doesn't change bufmgr file at all.
May be you looked at another patch - global_shared_temp-1.patch
which is accessing shared tables though shared buffers and so have to
change buffer tag to include backend ID in it.

> Did you look into my suggestion of extending the relmapper so that
> global temp tables would have a relfilenode of 0 like pg_class etc,
> and use a backend-local map of oid-to-relfilenode mappings?
>
> Similarly, TruncateSessionRelations probably shouldn't need to exist
> in this patch in its current form; there's no shared_buffers use to
> clean and the same file cleanup mechanism should handle both
> session-temp and local-temp relfilenodes.

In global_private_temp-1.patch TruncateSessionRelations does nothing
with shared buffers, it just delete relation files.

>
> Sequence initialization ignores sequence startval/firstval settings. Why?
> +               value[SEQ_COL_LASTVAL-1] = Int64GetDatumFast(1); /*
> start sequence with 1 */
>
>
>

I am handling only case of implicitly created sequences for
SERIAL/BIGSERIAL columns.
Is it possible to explicitly specify initial value and step for them?
If so, this place should definitely be rewritten.

> Doesn't this change the test outcome for RELPERSISTENCE_UNLOGGED?:
> - else if (newrelpersistence == RELPERSISTENCE_PERMANENT)
> + else if (newrelpersistence != RELPERSISTENCE_TEMP)
>

RELPERSISTENCE_UNLOGGED case is handle in previous IF branch.
-

Konstantin Knizhnik
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Konstantin Knizhnik 2019-08-16 11:41:36 Re: Global temporary tables
Previous Message Ibrar Ahmed 2019-08-16 11:12:32 Re: block-level incremental backup