Re: Global temporary tables
Konstantin Knizhnik <k.knizhnik@postgrespro.ru>
From: Konstantin Knizhnik <k.knizhnik@postgrespro.ru>
To: Craig Ringer <craig@2ndquadrant.com>
Cc: Pavel Stehule <pavel.stehule@gmail.com>,
PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2019-08-16T11:21:36Z
Lists: pgsql-hackers
On 16.08.2019 11:37, Craig Ringer wrote: > > > On Fri, 16 Aug 2019 at 15:30, Konstantin Knizhnik > <k.knizhnik@postgrespro.ru <mailto:k.knizhnik@postgrespro.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