diff options
Diffstat (limited to 'src/backend/commands')
| -rw-r--r-- | src/backend/commands/sequence.c | 4 | ||||
| -rw-r--r-- | src/backend/commands/tablecmds.c | 20 | ||||
| -rw-r--r-- | src/backend/commands/typecmds.c | 4 | ||||
| -rw-r--r-- | src/backend/commands/view.c | 4 | 
4 files changed, 23 insertions, 9 deletions
| diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c index fc2446997a7..292a4274493 100644 --- a/src/backend/commands/sequence.c +++ b/src/backend/commands/sequence.c @@ -8,7 +8,7 @@   *   *   * IDENTIFICATION - *	  $PostgreSQL: pgsql/src/backend/commands/sequence.c,v 1.168 2010/02/20 21:24:02 tgl Exp $ + *	  $PostgreSQL: pgsql/src/backend/commands/sequence.c,v 1.168.4.1 2010/08/18 18:35:29 tgl Exp $   *   *-------------------------------------------------------------------------   */ @@ -204,7 +204,7 @@ DefineSequence(CreateSeqStmt *seq)  	stmt->oncommit = ONCOMMIT_NOOP;  	stmt->tablespacename = NULL; -	seqoid = DefineRelation(stmt, RELKIND_SEQUENCE); +	seqoid = DefineRelation(stmt, RELKIND_SEQUENCE, seq->ownerId);  	rel = heap_open(seqoid, AccessExclusiveLock);  	tupDesc = RelationGetDescr(rel); diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 4c79f8f7e4d..c4d81bb4fec 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.332.2.3 2010/08/03 15:47:09 rhaas Exp $ + *	  $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.332.2.4 2010/08/18 18:35:29 tgl Exp $   *   *-------------------------------------------------------------------------   */ @@ -340,11 +340,21 @@ static const char *storage_name(char c);   *		DefineRelation   *				Creates a new relation.   * + * stmt carries parsetree information from an ordinary CREATE TABLE statement. + * The other arguments are used to extend the behavior for other cases: + * relkind: relkind to assign to the new relation + * ownerId: if not InvalidOid, use this as the new relation's owner. + * + * Note that permissions checks are done against current user regardless of + * ownerId.  A nonzero ownerId is used when someone is creating a relation + * "on behalf of" someone else, so we still want to see that the current user + * has permissions to do it. + *   * If successful, returns the OID of the new relation.   * ----------------------------------------------------------------   */  Oid -DefineRelation(CreateStmt *stmt, char relkind) +DefineRelation(CreateStmt *stmt, char relkind, Oid ownerId)  {  	char		relname[NAMEDATALEN];  	Oid			namespaceId; @@ -444,6 +454,10 @@ DefineRelation(CreateStmt *stmt, char relkind)  				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),  				 errmsg("only shared relations can be placed in pg_global tablespace"))); +	/* Identify user ID that will own the table */ +	if (!OidIsValid(ownerId)) +		ownerId = GetUserId(); +  	/*  	 * Parse and validate reloptions, if any.  	 */ @@ -536,7 +550,7 @@ DefineRelation(CreateStmt *stmt, char relkind)  										  InvalidOid,  										  InvalidOid,  										  ofTypeId, -										  GetUserId(), +										  ownerId,  										  descriptor,  										  list_concat(cookedDefaults,  													  old_constraints), diff --git a/src/backend/commands/typecmds.c b/src/backend/commands/typecmds.c index 8a85e79ea65..abde562fe30 100644 --- a/src/backend/commands/typecmds.c +++ b/src/backend/commands/typecmds.c @@ -8,7 +8,7 @@   *   *   * IDENTIFICATION - *	  $PostgreSQL: pgsql/src/backend/commands/typecmds.c,v 1.148 2010/02/26 02:00:40 momjian Exp $ + *	  $PostgreSQL: pgsql/src/backend/commands/typecmds.c,v 1.148.4.1 2010/08/18 18:35:29 tgl Exp $   *   * DESCRIPTION   *	  The "DefineFoo" routines take the parse tree and pick out the @@ -1546,7 +1546,7 @@ DefineCompositeType(const RangeVar *typevar, List *coldeflist)  	/*  	 * Finally create the relation.  This also creates the type.  	 */ -	return DefineRelation(createStmt, RELKIND_COMPOSITE_TYPE); +	return DefineRelation(createStmt, RELKIND_COMPOSITE_TYPE, InvalidOid);  }  /* diff --git a/src/backend/commands/view.c b/src/backend/commands/view.c index 900def01480..c291529f7d0 100644 --- a/src/backend/commands/view.c +++ b/src/backend/commands/view.c @@ -8,7 +8,7 @@   *   *   * IDENTIFICATION - *	  $PostgreSQL: pgsql/src/backend/commands/view.c,v 1.120 2010/01/02 16:57:40 momjian Exp $ + *	  $PostgreSQL: pgsql/src/backend/commands/view.c,v 1.120.6.1 2010/08/18 18:35:29 tgl Exp $   *   *-------------------------------------------------------------------------   */ @@ -239,7 +239,7 @@ DefineVirtualRelation(const RangeVar *relation, List *tlist, bool replace)  		 * existing view, so we don't need more code to complain if "replace"  		 * is false).  		 */ -		return DefineRelation(createStmt, RELKIND_VIEW); +		return DefineRelation(createStmt, RELKIND_VIEW, InvalidOid);  	}  } | 
