Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit49ce6ff

Browse files
committed
Allow removal of system-named pg_* temp tables. Rename temp file/dir as
pgsql_tmp.
1 parent0bba6bd commit49ce6ff

File tree

5 files changed

+51
-47
lines changed

5 files changed

+51
-47
lines changed

‎src/backend/catalog/aclchk.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/catalog/aclchk.c,v 1.50 2001/06/09 23:21:54 petere Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/catalog/aclchk.c,v 1.51 2001/06/18 16:13:21 momjian Exp $
1212
*
1313
* NOTES
1414
* See acl.h.
@@ -32,6 +32,7 @@
3232
#include"parser/parse_func.h"
3333
#include"utils/acl.h"
3434
#include"utils/syscache.h"
35+
#include"utils/temprel.h"
3536

3637
staticint32aclcheck(Acl*acl,AclIdid,AclIdTypeidtype,AclModemode);
3738

@@ -437,7 +438,7 @@ pg_aclcheck(char *relname, Oid userid, AclMode mode)
437438
*/
438439
if ((mode& (ACL_INSERT |ACL_UPDATE |ACL_DELETE))&&
439440
!allowSystemTableMods&&IsSystemRelationName(relname)&&
440-
strncmp(relname,"pg_temp.",strlen("pg_temp."))!=0&&
441+
!is_temp_relname(relname)&&
441442
!((Form_pg_shadow)GETSTRUCT(tuple))->usecatupd)
442443
{
443444
#ifdefACLDEBUG

‎src/backend/catalog/heap.c

Lines changed: 35 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.167 2001/06/12 05:55:49 tgl Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.168 2001/06/18 16:13:21 momjian Exp $
1212
*
1313
*
1414
* INTERFACE ROUTINES
@@ -281,8 +281,8 @@ heap_create(char *relname,
281281
* replace relname of caller with a unique name for a temp
282282
* relation
283283
*/
284-
snprintf(relname,NAMEDATALEN,"pg_temp.%d.%u",
285-
(int)MyProcPid,uniqueId++);
284+
snprintf(relname,NAMEDATALEN,"%s_%d_%u",
285+
PG_TEMP_REL_PREFIX, (int)MyProcPid,uniqueId++);
286286
}
287287

288288
/*
@@ -874,37 +874,6 @@ heap_create_with_catalog(char *relname,
874874
}
875875

876876

877-
/* ----------------------------------------------------------------
878-
*heap_drop_with_catalog- removes all record of named relation from catalogs
879-
*
880-
*1)open relation, check for existence, etc.
881-
*2)remove inheritance information
882-
*3)remove indexes
883-
*4)remove pg_class tuple
884-
*5)remove pg_attribute tuples and related descriptions
885-
*6)remove pg_description tuples
886-
*7)remove pg_type tuples
887-
*8)RemoveConstraints ()
888-
*9)unlink relation
889-
*
890-
* old comments
891-
*Except for vital relations, removes relation from
892-
*relation catalog, and related attributes from
893-
*attribute catalog (needed?). (Anything else?)
894-
*
895-
*get proper relation from relation catalog (if not arg)
896-
*scan attribute catalog deleting attributes of reldesc
897-
*(necessary?)
898-
*delete relation from relation catalog
899-
*(How are the tuples of the relation discarded?)
900-
*
901-
*XXX Must fix to work with indexes.
902-
*There may be a better order for doing things.
903-
*Problems with destroying a deleted database--cannot create
904-
*a struct reldesc without having an open file descriptor.
905-
* ----------------------------------------------------------------
906-
*/
907-
908877
/* --------------------------------
909878
*RelationRemoveInheritance
910879
*
@@ -1334,10 +1303,35 @@ DeleteTypeTuple(Relation rel)
13341303
heap_close(pg_type_desc,RowExclusiveLock);
13351304
}
13361305

1337-
/* --------------------------------
1338-
*heap_drop_with_catalog
1306+
/* ----------------------------------------------------------------
1307+
*heap_drop_with_catalog- removes all record of named relation from catalogs
13391308
*
1340-
* --------------------------------
1309+
*1)open relation, check for existence, etc.
1310+
*2)remove inheritance information
1311+
*3)remove indexes
1312+
*4)remove pg_class tuple
1313+
*5)remove pg_attribute tuples and related descriptions
1314+
*6)remove pg_description tuples
1315+
*7)remove pg_type tuples
1316+
*8)RemoveConstraints ()
1317+
*9)unlink relation
1318+
*
1319+
* old comments
1320+
*Except for vital relations, removes relation from
1321+
*relation catalog, and related attributes from
1322+
*attribute catalog (needed?). (Anything else?)
1323+
*
1324+
*get proper relation from relation catalog (if not arg)
1325+
*scan attribute catalog deleting attributes of reldesc
1326+
*(necessary?)
1327+
*delete relation from relation catalog
1328+
*(How are the tuples of the relation discarded?)
1329+
*
1330+
*XXX Must fix to work with indexes.
1331+
*There may be a better order for doing things.
1332+
*Problems with destroying a deleted database--cannot create
1333+
*a struct reldesc without having an open file descriptor.
1334+
* ----------------------------------------------------------------
13411335
*/
13421336
void
13431337
heap_drop_with_catalog(constchar*relname,
@@ -1360,8 +1354,10 @@ heap_drop_with_catalog(const char *relname,
13601354
* prevent deletion of system relations
13611355
*/
13621356
/* allow temp of pg_class? Guess so. */
1363-
if (!istemp&& !allow_system_table_mods&&
1364-
IsSystemRelationName(RelationGetRelationName(rel)))
1357+
if (!istemp&&
1358+
!allow_system_table_mods&&
1359+
IsSystemRelationName(RelationGetRelationName(rel))&&
1360+
!is_temp_relname(RelationGetRelationName(rel)))
13651361
elog(ERROR,"System relation \"%s\" may not be dropped",
13661362
RelationGetRelationName(rel));
13671363

‎src/backend/storage/file/fd.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1994, Regents of the University of California
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/storage/file/fd.c,v 1.81 2001/06/11 04:12:29 tgl Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/storage/file/fd.c,v 1.82 2001/06/18 16:13:21 momjian Exp $
1111
*
1212
* NOTES:
1313
*
@@ -54,8 +54,8 @@
5454

5555

5656
/* Filename components for OpenTemporaryFile */
57-
#definePG_TEMP_FILES_DIR "pg_tempfiles"
58-
#definePG_TEMP_FILE_PREFIX "pg_temp"
57+
#definePG_TEMP_FILES_DIR "pgsql_tmp"
58+
#definePG_TEMP_FILE_PREFIX "pgsql_tmp"
5959

6060

6161
/*

‎src/backend/tcop/utility.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
*
1111
*
1212
* IDENTIFICATION
13-
* $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.113 2001/06/09 23:21:54 petere Exp $
13+
* $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.114 2001/06/18 16:13:21 momjian Exp $
1414
*
1515
*-------------------------------------------------------------------------
1616
*/
@@ -46,6 +46,7 @@
4646
#include"utils/acl.h"
4747
#include"utils/ps_status.h"
4848
#include"utils/syscache.h"
49+
#include"utils/temprel.h"
4950
#include"access/xlog.h"
5051

5152
/*
@@ -120,7 +121,8 @@ CheckDropPermissions(char *name, char rightkind)
120121
elog(ERROR,"you do not own %s \"%s\"",
121122
rentry->name,name);
122123

123-
if (!allowSystemTableMods&&IsSystemRelationName(name))
124+
if (!allowSystemTableMods&&IsSystemRelationName(name)&&
125+
!is_temp_relname(name))
124126
elog(ERROR,"%s \"%s\" is a system %s",
125127
rentry->name,name,rentry->name);
126128

‎src/include/utils/temprel.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
10-
* $Id: temprel.h,v 1.15 2001/03/22 04:01:14 momjian Exp $
10+
* $Id: temprel.h,v 1.16 2001/06/18 16:13:21 momjian Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -16,6 +16,11 @@
1616

1717
#include"access/htup.h"
1818

19+
#definePG_TEMP_REL_PREFIX "pg_temp"
20+
21+
#defineis_temp_relname(relname) \
22+
(strncmp(relname, PG_TEMP_REL_PREFIX, strlen(PG_TEMP_REL_PREFIX)) == 0)
23+
1924
externvoidcreate_temp_relation(constchar*relname,
2025
HeapTuplepg_class_tuple);
2126
externvoidremove_temp_rel_by_relid(Oidrelid);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp