From a535cdf130167ca6a086805b35f59a6b669b73d7 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Tue, 6 Mar 2007 02:06:15 +0000 Subject: [PATCH] Revert temp_tablespaces because of coding problems, per Tom. --- doc/src/sgml/config.sgml | 31 +--- src/backend/commands/indexcmds.c | 10 +- src/backend/commands/tablecmds.c | 6 +- src/backend/commands/tablespace.c | 143 +----------------- src/backend/executor/execMain.c | 6 +- src/backend/storage/file/fd.c | 54 +------ src/backend/utils/misc/guc.c | 13 +- src/backend/utils/misc/postgresql.conf.sample | 2 - src/include/commands/tablespace.h | 3 +- src/include/utils/guc.h | 6 +- 10 files changed, 16 insertions(+), 258 deletions(-) diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 2059fed863..17504b3d5e 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -1,4 +1,4 @@ - + Server Configuration @@ -3440,35 +3440,6 @@ SELECT * FROM parent WHERE key = 2400; - - temp_tablespaces (string) - - temp_tablespaces configuration parameter - - tablespacetemp - - - This variable specifies tablespaces in which to create temp - objects (temp tables and indexes on temp tables) when a - CREATE command does not explicitly specify a tablespace - and temp files when necessary (eg. for sorting operations). - - - - 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, - PostgreSQL will automatically use the default - tablespace of the current database. - - - - For more information on tablespaces, - see . - - - - check_function_bodies (boolean) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index b01093106c..8c5fdbb6c9 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -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 */ } diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index a4d13f3801..ebc974f873 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -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(); diff --git a/src/backend/commands/tablespace.c b/src/backend/commands/tablespace.c index 80c5a927a3..aa2b33c932 100644 --- a/src/backend/commands/tablespace.c +++ b/src/backend/commands/tablespace.c @@ -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 diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index 333edf6944..239656dd06 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -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(); diff --git a/src/backend/storage/file/fd.c b/src/backend/storage/file/fd.c index 7af361adf0..1d04caad4f 100644 --- a/src/backend/storage/file/fd.c +++ b/src/backend/storage/file/fd.c @@ -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 #include -#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; diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 173e9903c5..0fa3489fb6 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -10,7 +10,7 @@ * Written by Peter Eisentraut . * * 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, diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index 7ee8d417c0..cf2dfdc099 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -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 diff --git a/src/include/commands/tablespace.h b/src/include/commands/tablespace.h index 6d3a333cf2..47e4beb255 100644 --- a/src/include/commands/tablespace.h +++ b/src/include/commands/tablespace.h @@ -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); diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h index 51cc05a7a7..3efb861893 100644 --- a/src/include/utils/guc.h +++ b/src/include/utils/guc.h @@ -7,7 +7,7 @@ * Copyright (c) 2000-2007, PostgreSQL Global Development Group * Written by Peter Eisentraut . * - * $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 */