Revert temp_tablespaces because of coding problems, per Tom.

This commit is contained in:
Bruce Momjian 2007-03-06 02:06:15 +00:00
parent 4ae6967f5f
commit a535cdf130
10 changed files with 16 additions and 258 deletions

View File

@ -1,4 +1,4 @@
<!-- $PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.114 2007/03/03 18:46:40 momjian Exp $ -->
<!-- $PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.115 2007/03/06 02:06:12 momjian Exp $ -->
<chapter Id="runtime-config">
<title>Server Configuration</title>
@ -3440,35 +3440,6 @@ SELECT * FROM parent WHERE key = 2400;
</listitem>
</varlistentry>
<varlistentry id="guc-temp-tablespaces" xreflabel="temp_tablespaces">
<term><varname>temp_tablespaces</varname> (<type>string</type>)</term>
<indexterm>
<primary><varname>temp_tablespaces</> configuration parameter</primary>
</indexterm>
<indexterm><primary>tablespace</><secondary>temp</></>
<listitem>
<para>
This variable specifies tablespaces in which to create temp
objects (temp tables and indexes on temp tables) when a
<command>CREATE</> command does not explicitly specify a tablespace
and temp files when necessary (eg. for sorting operations).
</para>
<para>
The value is either a list of names of tablespaces, or an empty
string to specify using the default tablespace of the current database.
If the value does not match the name of any existing tablespace,
<productname>PostgreSQL</> will automatically use the default
tablespace of the current database.
</para>
<para>
For more information on tablespaces,
see <xref linkend="manage-ag-tablespaces">.
</para>
</listitem>
</varlistentry>
<varlistentry id="guc-check-function-bodies" xreflabel="check_function_bodies">
<term><varname>check_function_bodies</varname> (<type>boolean</type>)</term>
<indexterm>

View File

@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/commands/indexcmds.c,v 1.155 2007/02/01 19:10:26 momjian Exp $
* $PostgreSQL: pgsql/src/backend/commands/indexcmds.c,v 1.156 2007/03/06 02:06:12 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@ -209,13 +209,7 @@ DefineIndex(RangeVar *heapRelation,
}
else
{
/*
* if the target table is temporary then use a temp_tablespace
*/
if (!rel->rd_istemp)
tablespaceId = GetDefaultTablespace();
else
tablespaceId = GetTempTablespace();
tablespaceId = GetDefaultTablespace();
/* note InvalidOid is OK in this case */
}

View File

@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.215 2007/02/16 22:04:02 tgl Exp $
* $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.216 2007/03/06 02:06:13 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@ -330,10 +330,6 @@ DefineRelation(CreateStmt *stmt, char relkind)
errmsg("tablespace \"%s\" does not exist",
stmt->tablespacename)));
}
else if (stmt->relation->istemp)
{
tablespaceId = GetTempTablespace();
}
else
{
tablespaceId = GetDefaultTablespace();

View File

@ -37,7 +37,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/commands/tablespace.c,v 1.42 2007/02/01 19:10:26 momjian Exp $
* $PostgreSQL: pgsql/src/backend/commands/tablespace.c,v 1.43 2007/03/06 02:06:13 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@ -65,12 +65,9 @@
#include "utils/lsyscache.h"
/* GUC variables */
/* GUC variable */
char *default_tablespace = NULL;
char *temp_tablespaces = NULL;
int next_temp_tablespace;
int num_temp_tablespaces;
static bool remove_tablespace_directories(Oid tablespaceoid, bool redo);
static void set_short_version(const char *path);
@ -933,142 +930,6 @@ GetDefaultTablespace(void)
return result;
}
/*
* Routines for handling the GUC variable 'temp_tablespaces'.
*/
/* assign_hook: validate new temp_tablespaces, do extra actions as needed */
const char *
assign_temp_tablespaces(const char *newval, bool doit, GucSource source)
{
char *rawname;
List *namelist;
ListCell *l;
/* Need a modifiable copy of string */
rawname = pstrdup(newval);
/* Parse string into list of identifiers */
if (!SplitIdentifierString(rawname, ',', &namelist))
{
/* syntax error in name list */
pfree(rawname);
list_free(namelist);
return NULL;
}
num_temp_tablespaces = 0;
foreach(l, namelist)
{
char *curname = (char *) lfirst(l);
/*
* If we aren't inside a transaction, we cannot do database access so
* cannot verify the individual names. Must accept the list on faith.
*/
if (source >= PGC_S_INTERACTIVE && IsTransactionState())
{
/*
* Verify that all the names are valid tablspace names
* We do not check for USAGE rights should we?
*/
if (get_tablespace_oid(curname) == InvalidOid)
ereport((source == PGC_S_TEST) ? NOTICE : ERROR,
(errcode(ERRCODE_UNDEFINED_OBJECT),
errmsg("tablespace \"%s\" does not exist", curname)));
}
num_temp_tablespaces++;
}
/*
* Select the first tablespace to use
*/
next_temp_tablespace = MyProcPid % num_temp_tablespaces;
pfree(rawname);
list_free(namelist);
return newval;
}
/*
* GetTempTablespace -- get the OID of the tablespace for temporary objects
*
* May return InvalidOid to indicate "use the database's default tablespace"
*
* This exists to hide the temp_tablespace GUC variable.
*/
Oid
GetTempTablespace(void)
{
Oid result;
char *curname = NULL;
char *rawname;
List *namelist;
ListCell *l;
int i = 0;
if ( temp_tablespaces == NULL )
return InvalidOid;
/* Need a modifiable version of temp_tablespaces */
rawname = pstrdup(temp_tablespaces);
/* Parse string into list of identifiers */
if (!SplitIdentifierString(rawname, ',', &namelist))
{
/* syntax error in name list */
pfree(rawname);
list_free(namelist);
return InvalidOid;
}
/*
* Iterate through the list of namespaces until the one we need
* (next_temp_tablespace)
*/
foreach(l, namelist)
{
curname = (char *) lfirst(l);
if ( i == next_temp_tablespace )
break;
i++;
}
/* Prepare for the next time the function is called */
next_temp_tablespace++;
if (next_temp_tablespace == num_temp_tablespaces)
next_temp_tablespace = 0;
/* Fast path for temp_tablespaces == "" */
if ( curname == NULL || curname[0] == '\0') {
list_free(namelist);
pfree(rawname);
return InvalidOid;
}
/*
* It is tempting to cache this lookup for more speed, but then we would
* fail to detect the case where the tablespace was dropped since the GUC
* variable was set. Note also that we don't complain if the value fails
* to refer to an existing tablespace; we just silently return InvalidOid,
* causing the new object to be created in the database's tablespace.
*/
result = get_tablespace_oid(curname);
/* We don't free rawname before because curname points to a part of it */
pfree(rawname);
/*
* Allow explicit specification of database's default tablespace in
* default_tablespace without triggering permissions checks.
*/
if (result == MyDatabaseTableSpace)
result = InvalidOid;
list_free(namelist);
return result;
}
/*
* get_tablespace_oid - given a tablespace name, look up the OID

View File

@ -26,7 +26,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/executor/execMain.c,v 1.289 2007/02/27 01:11:25 tgl Exp $
* $PostgreSQL: pgsql/src/backend/executor/execMain.c,v 1.290 2007/03/06 02:06:13 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@ -2440,10 +2440,6 @@ OpenIntoRel(QueryDesc *queryDesc)
errmsg("tablespace \"%s\" does not exist",
into->tableSpaceName)));
}
else if (into->rel->istemp)
{
tablespaceId = GetTempTablespace();
}
else
{
tablespaceId = GetDefaultTablespace();

View File

@ -7,7 +7,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/storage/file/fd.c,v 1.136 2007/02/28 15:59:30 mha Exp $
* $PostgreSQL: pgsql/src/backend/storage/file/fd.c,v 1.137 2007/03/06 02:06:14 momjian Exp $
*
* NOTES:
*
@ -46,8 +46,6 @@
#include <unistd.h>
#include <fcntl.h>
#include "commands/tablespace.h"
#include "miscadmin.h"
#include "access/xact.h"
#include "storage/fd.h"
@ -78,7 +76,6 @@
*/
#define FD_MINFREE 10
#define OIDCHARS 10 /* max chars printed by %u */
/*
* A number of platforms allow individual processes to open many more files
@ -883,51 +880,13 @@ OpenTemporaryFile(bool interXact)
{
char tempfilepath[MAXPGPATH];
File file;
Oid oid;
char *path;
int pathlen;
/*
* Take a look what should be the path of the temporary file
* Generate a tempfile name that should be unique within the current
* database instance.
*/
oid = GetTempTablespace();
if (oid != InvalidOid)
{
/*
* As we got a valid tablespace, try to create the
* file there
*/
pathlen = strlen("pg_tblspc/") + OIDCHARS + 1;
path = (char *) palloc(pathlen);
snprintf(path, pathlen, "pg_tblspc/%u", oid );
/*
* Generate a tempfile name that should be unique within the current
* database instance.
*/
snprintf(tempfilepath, sizeof(tempfilepath),
"%s/%s%d.%ld", path, PG_TEMP_FILE_PREFIX,
MyProcPid, tempFileCounter++);
pfree(path);
file = PathNameOpenFile(tempfilepath,
O_RDWR | O_CREAT | O_TRUNC | PG_BINARY,
0600);
}
/*
* Create a normal temporary file if no tablespace returned or
* couldn't create the file in the tablespace "oid"
*/
if (oid == InvalidOid || file <= 0)
{
path = PG_TEMP_FILES_DIR;
/*
* Generate a tempfile name that should be unique within the current
* database instance.
*/
snprintf(tempfilepath, sizeof(tempfilepath),
"%s/%s%d.%ld", path, PG_TEMP_FILE_PREFIX,
snprintf(tempfilepath, sizeof(tempfilepath),
"%s/%s%d.%ld", PG_TEMP_FILES_DIR, PG_TEMP_FILE_PREFIX,
MyProcPid, tempFileCounter++);
/*
@ -959,8 +918,7 @@ OpenTemporaryFile(bool interXact)
if (file <= 0)
elog(ERROR, "could not create temporary file \"%s\": %m",
tempfilepath);
}
}
}
/* Mark it for deletion at close */
VfdCache[file].fdstate |= FD_TEMPORARY;

View File

@ -10,7 +10,7 @@
* Written by Peter Eisentraut <peter_e@gmx.net>.
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.378 2007/03/03 18:46:40 momjian Exp $
* $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.379 2007/03/06 02:06:14 momjian Exp $
*
*--------------------------------------------------------------------
*/
@ -99,7 +99,6 @@ extern bool Log_disconnections;
extern int CommitDelay;
extern int CommitSiblings;
extern char *default_tablespace;
extern char *temp_tablespaces;
extern bool fullPageWrites;
#ifdef TRACE_SORT
@ -2317,16 +2316,6 @@ static struct config_string ConfigureNamesString[] =
"content", assign_xmloption, NULL
},
{
{"temp_tablespaces", PGC_USERSET, PGC_S_FILE,
gettext_noop("Sets the tablespaces suitable for creating new objects and sort files."),
NULL,
GUC_LIST_INPUT | GUC_LIST_QUOTE
},
&temp_tablespaces,
NULL, assign_temp_tablespaces, NULL
},
#ifdef USE_SSL
{
{"ssl_ciphers", PGC_POSTMASTER, CONN_AUTH_SECURITY,

View File

@ -404,8 +404,6 @@
#search_path = '"$user",public' # schema names
#default_tablespace = '' # a tablespace name, '' uses
# the default
#temp_tablespaces = '' # a list of tablespace names,
# '' uses default_tablespace
#check_function_bodies = on
#default_transaction_isolation = 'read committed'
#default_transaction_read_only = off

View File

@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* $PostgreSQL: pgsql/src/include/commands/tablespace.h,v 1.15 2007/01/25 04:35:11 momjian Exp $
* $PostgreSQL: pgsql/src/include/commands/tablespace.h,v 1.16 2007/03/06 02:06:15 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@ -41,7 +41,6 @@ extern void AlterTableSpaceOwner(const char *name, Oid newOwnerId);
extern void TablespaceCreateDbspace(Oid spcNode, Oid dbNode, bool isRedo);
extern Oid GetDefaultTablespace(void);
extern Oid GetTempTablespace(void);
extern Oid get_tablespace_oid(const char *tablespacename);
extern char *get_tablespace_name(Oid spc_oid);

View File

@ -7,7 +7,7 @@
* Copyright (c) 2000-2007, PostgreSQL Global Development Group
* Written by Peter Eisentraut <peter_e@gmx.net>.
*
* $PostgreSQL: pgsql/src/include/utils/guc.h,v 1.79 2007/01/25 04:35:11 momjian Exp $
* $PostgreSQL: pgsql/src/include/utils/guc.h,v 1.80 2007/03/06 02:06:15 momjian Exp $
*--------------------------------------------------------------------
*/
#ifndef GUC_H
@ -238,8 +238,4 @@ extern const char *assign_search_path(const char *newval,
extern const char *assign_xlog_sync_method(const char *method,
bool doit, GucSource source);
/* in commands/tablespace.c */
extern const char *assign_temp_tablespaces(const char *newval,
bool doit, GucSource source);
#endif /* GUC_H */