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
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 |