mirror of
https://github.com/postgres/postgres.git
synced 2025-07-05 07:21:24 +03:00
Fix temporary tablespaces for shared filesets some more.
Commitecd9e9f0b
fixed the problem in the wrong place, causing unwanted side-effects on the behavior of GetNextTempTableSpace(). Instead, let's make SharedFileSetInit() responsible for subbing in the value of MyDatabaseTableSpace when the default tablespace is called for. The convention about what is in the tempTableSpaces[] array is evidently insufficiently documented, so try to improve that. It also looks like SharedFileSetInit() is doing the wrong thing in the case where temp_tablespaces is empty. It was hard-wiring use of the pg_default tablespace, but it seems like using MyDatabaseTableSpace is more consistent with what happens for other temp files. Back-patch the reversion of PrepareTempTablespaces()'s behavior to 9.5, asecd9e9f0b
was. The changes in SharedFileSetInit() go back to v11 where that was introduced. (Note there is net zero code change before v11 from these two patch sets, so nothing to release-note.) Magnus Hagander and Tom Lane Discussion: https://postgr.es/m/CABUevExg5YEsOvqMxrjoNvb3ApVyH+9jggWGKwTDFyFCVWczGQ@mail.gmail.com
This commit is contained in:
@ -1183,6 +1183,7 @@ GetDefaultTablespace(char relpersistence, bool partitioned)
|
||||
|
||||
typedef struct
|
||||
{
|
||||
/* Array of OIDs to be passed to SetTempTablespaces() */
|
||||
int numSpcs;
|
||||
Oid tblSpcs[FLEXIBLE_ARRAY_MEMBER];
|
||||
} temp_tablespaces_extra;
|
||||
@ -1232,6 +1233,7 @@ check_temp_tablespaces(char **newval, void **extra, GucSource source)
|
||||
/* Allow an empty string (signifying database default) */
|
||||
if (curname[0] == '\0')
|
||||
{
|
||||
/* InvalidOid signifies database's default tablespace */
|
||||
tblSpcs[numSpcs++] = InvalidOid;
|
||||
continue;
|
||||
}
|
||||
@ -1258,6 +1260,7 @@ check_temp_tablespaces(char **newval, void **extra, GucSource source)
|
||||
*/
|
||||
if (curoid == MyDatabaseTableSpace)
|
||||
{
|
||||
/* InvalidOid signifies database's default tablespace */
|
||||
tblSpcs[numSpcs++] = InvalidOid;
|
||||
continue;
|
||||
}
|
||||
@ -1368,6 +1371,7 @@ PrepareTempTablespaces(void)
|
||||
/* Allow an empty string (signifying database default) */
|
||||
if (curname[0] == '\0')
|
||||
{
|
||||
/* InvalidOid signifies database's default tablespace */
|
||||
tblSpcs[numSpcs++] = InvalidOid;
|
||||
continue;
|
||||
}
|
||||
@ -1386,7 +1390,8 @@ PrepareTempTablespaces(void)
|
||||
*/
|
||||
if (curoid == MyDatabaseTableSpace)
|
||||
{
|
||||
tblSpcs[numSpcs++] = curoid;
|
||||
/* InvalidOid signifies database's default tablespace */
|
||||
tblSpcs[numSpcs++] = InvalidOid;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user