Re: A bit confused about "pgsql_tmp" vs "temp tablespace"

From: Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com>
To: Thomas Kellerer <spam_eater(at)gmx(dot)net>, pgsql-general(at)lists(dot)postgresql(dot)org
Subject: Re: A bit confused about "pgsql_tmp" vs "temp tablespace"
Date: 2018-07-18 14:09:26
Message-ID: 4cccee55-0106-76e9-feb3-69c0bbca6f2e@aklaver.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 07/18/2018 06:57 AM, Thomas Kellerer wrote:
> Adrian Klaver schrieb am 18.07.2018 um 15:06:
>>> In the chapter "Database File layout" the pgsql_tmp is explained as follows:
>>>
>>>     Temporary files (for operations such as sorting more data than can fit in memory)
>>>     are created within PGDATA/base/pgsql_tmp, or within a pgsql_tmp subdirectory of
>>>     a tablespace directory
>>>
>>> However the documentation for "temp_tablespaces" states:
>>>
>>>     Temporary files for purposes such as sorting large data sets are also created
>>>     in these tablespaces.
>>>
>>>
>>> How do these two things related to each other?
>>>
>>> Does this mean that if I do not explicitly create a dedicated "temp tablespace" then the pgsql_tmp subdirectory is used.
>>> But _if_ I do create a temp tablespace (by creating one, and adding it to temp_tablespaces) then the sorting is done *there*?
>>
>> Yes, for those objects that do not have a tablespace specified in their CREATE statement.
>>
>>>
>>> So far I thought that a temp tablespace is only used for temporary tables (and indexes on them) but that paragraph in the
>>> temp_tablespaces documentation seems to indicate otherwise.
>>
>> The Database File Layout section you quoted above says the same
>> thing. Basically setting temp_tablespaces just overrides where temp
>> objects and operation files are placed when a tablespace is not
>> specified in their creation.
>
> Thanks.
>
> I understand the relation between explicitly CREATEd objects and the temp tablespace(s).
>
> But what about the (temp) space needed for e.g. sorting, grouping or intermediate results from CTEs or derived tables?
> Is that also controlled through the temp_tablespaces?

Yes, all setting temp_tablespace from '' to some_tablespace(s) does is
redirect the creation of unspecified temp files from the db
default_namespace/pgsql_tmp to the named some_tablespace(s)/pgsql_tmp.

To verify this create a tablespace and add it to temp_tablespace and
then do temp operations and look at the_tablespace/pgsql_tmp/.

>
>
>
>
>

--
Adrian Klaver
adrian(dot)klaver(at)aklaver(dot)com

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Vikas Sharma 2018-07-18 14:41:31 Postgresql & PGPool packages minor version different on Standby server
Previous Message Tom Lane 2018-07-18 14:01:54 Re: A bit confused about "pgsql_tmp" vs "temp tablespace"