Hi,

I can understand why we have relation_openrv and try_relation_open,
but relation_open_nowait can be merged with relation_open.

Or there is something i'm missing? attached is a patch that do the merge.

-- 
regards,
Jaime Casanova

"Programming today is a race between software engineers striving to
build bigger and better idiot-proof programs and the universe trying
to produce bigger and better idiots.
So far, the universe is winning."
                                       Richard Cook
Index: contrib/dblink/dblink.c
===================================================================
RCS file: /home/postgres/cvsrepo/pgsql/contrib/dblink/dblink.c,v
retrieving revision 1.65
diff -c -r1.65 dblink.c
*** contrib/dblink/dblink.c	27 Aug 2007 01:24:50 -0000	1.65
--- contrib/dblink/dblink.c	28 Sep 2007 02:26:18 -0000
***************
*** 1690,1696 ****
  	AclResult	aclresult;
  
  	/* open relation using relid, check permissions, get tupdesc */
! 	rel = relation_open(relid, AccessShareLock);
  
  	aclresult = pg_class_aclcheck(RelationGetRelid(rel), GetUserId(),
  								  ACL_SELECT);
--- 1690,1696 ----
  	AclResult	aclresult;
  
  	/* open relation using relid, check permissions, get tupdesc */
! 	rel = relation_open(relid, AccessShareLock, true);
  
  	aclresult = pg_class_aclcheck(RelationGetRelid(rel), GetUserId(),
  								  ACL_SELECT);
***************
*** 1819,1825 ****
  	/*
  	 * Open relation using relid
  	 */
! 	rel = relation_open(relid, AccessShareLock);
  	tupdesc = rel->rd_att;
  	natts = tupdesc->natts;
  
--- 1819,1825 ----
  	/*
  	 * Open relation using relid
  	 */
! 	rel = relation_open(relid, AccessShareLock, true);
  	tupdesc = rel->rd_att;
  	natts = tupdesc->natts;
  
***************
*** 1902,1908 ****
  	/*
  	 * Open relation using relid
  	 */
! 	rel = relation_open(relid, AccessShareLock);
  	tupdesc = rel->rd_att;
  	natts = tupdesc->natts;
  
--- 1902,1908 ----
  	/*
  	 * Open relation using relid
  	 */
! 	rel = relation_open(relid, AccessShareLock, true);
  	tupdesc = rel->rd_att;
  	natts = tupdesc->natts;
  
***************
*** 1954,1960 ****
  	/*
  	 * Open relation using relid
  	 */
! 	rel = relation_open(relid, AccessShareLock);
  	tupdesc = rel->rd_att;
  	natts = tupdesc->natts;
  
--- 1954,1960 ----
  	/*
  	 * Open relation using relid
  	 */
! 	rel = relation_open(relid, AccessShareLock, true);
  	tupdesc = rel->rd_att;
  	natts = tupdesc->natts;
  
***************
*** 2098,2104 ****
  	/*
  	 * Open relation using relid
  	 */
! 	rel = relation_open(relid, AccessShareLock);
  	tupdesc = CreateTupleDescCopy(rel->rd_att);
  	relation_close(rel, AccessShareLock);
  
--- 2098,2104 ----
  	/*
  	 * Open relation using relid
  	 */
! 	rel = relation_open(relid, AccessShareLock, true);
  	tupdesc = CreateTupleDescCopy(rel->rd_att);
  	relation_close(rel, AccessShareLock);
  
Index: contrib/pgstattuple/pgstattuple.c
===================================================================
RCS file: /home/postgres/cvsrepo/pgsql/contrib/pgstattuple/pgstattuple.c,v
retrieving revision 1.30
diff -c -r1.30 pgstattuple.c
*** contrib/pgstattuple/pgstattuple.c	20 Sep 2007 17:56:30 -0000	1.30
--- contrib/pgstattuple/pgstattuple.c	28 Sep 2007 02:22:00 -0000
***************
*** 183,189 ****
  				 (errmsg("must be superuser to use pgstattuple functions"))));
  
  	/* open relation */
! 	rel = relation_open(relid, AccessShareLock);
  
  	PG_RETURN_DATUM(pgstat_relation(rel, fcinfo));
  }
--- 183,189 ----
  				 (errmsg("must be superuser to use pgstattuple functions"))));
  
  	/* open relation */
! 	rel = relation_open(relid, AccessShareLock, true);
  
  	PG_RETURN_DATUM(pgstat_relation(rel, fcinfo));
  }
Index: src/backend/access/heap/heapam.c
===================================================================
RCS file: /home/postgres/cvsrepo/pgsql/src/backend/access/heap/heapam.c,v
retrieving revision 1.242
diff -c -r1.242 heapam.c
*** src/backend/access/heap/heapam.c	21 Sep 2007 21:25:42 -0000	1.242
--- src/backend/access/heap/heapam.c	28 Sep 2007 02:51:24 -0000
***************
*** 819,824 ****
--- 819,827 ----
   *		obtained on the relation.  (Generally, NoLock should only be
   *		used if the caller knows it has some appropriate lock on the
   *		relation already.)
+  *		
+  *		if wait is false open but don't wait for lock, instead throw an error 
+  *		when the requested lock is not immediately obtainable.
   *
   *		An error is raised if the relation does not exist.
   *
***************
*** 827,833 ****
   * ----------------
   */
  Relation
! relation_open(Oid relationId, LOCKMODE lockmode)
  {
  	Relation	r;
  
--- 830,836 ----
   * ----------------
   */
  Relation
! relation_open(Oid relationId, LOCKMODE lockmode, bool wait)
  {
  	Relation	r;
  
***************
*** 835,842 ****
  
  	/* Get the lock before trying to open the relcache entry */
  	if (lockmode != NoLock)
! 		LockRelationOid(relationId, lockmode);
! 
  	/* The relcache does all the real work... */
  	r = RelationIdGetRelation(relationId);
  
--- 838,865 ----
  
  	/* Get the lock before trying to open the relcache entry */
  	if (lockmode != NoLock)
! 	{
! 		if (wait)
! 			LockRelationOid(relationId, lockmode);
! 		else
! 			if (!ConditionalLockRelationOid(relationId, lockmode))
! 			{
! 				/* try to throw error by name; relation could be deleted... */
! 				char	   *relname = get_rel_name(relationId);
! 	
! 				if (relname)
! 					ereport(ERROR,
! 							(errcode(ERRCODE_LOCK_NOT_AVAILABLE),
! 							 errmsg("could not obtain lock on relation \"%s\"",
! 									relname)));
! 				else
! 					ereport(ERROR,
! 							(errcode(ERRCODE_LOCK_NOT_AVAILABLE),
! 						  errmsg("could not obtain lock on relation with OID %u",
! 								 relationId)));
! 			}
! 	}
! 	
  	/* The relcache does all the real work... */
  	r = RelationIdGetRelation(relationId);
  
***************
*** 892,942 ****
  	return r;
  }
  
- /* ----------------
-  *		relation_open_nowait - open but don't wait for lock
-  *
-  *		Same as relation_open, except throw an error instead of waiting
-  *		when the requested lock is not immediately obtainable.
-  * ----------------
-  */
- Relation
- relation_open_nowait(Oid relationId, LOCKMODE lockmode)
- {
- 	Relation	r;
- 
- 	Assert(lockmode >= NoLock && lockmode < MAX_LOCKMODES);
- 
- 	/* Get the lock before trying to open the relcache entry */
- 	if (lockmode != NoLock)
- 	{
- 		if (!ConditionalLockRelationOid(relationId, lockmode))
- 		{
- 			/* try to throw error by name; relation could be deleted... */
- 			char	   *relname = get_rel_name(relationId);
- 
- 			if (relname)
- 				ereport(ERROR,
- 						(errcode(ERRCODE_LOCK_NOT_AVAILABLE),
- 						 errmsg("could not obtain lock on relation \"%s\"",
- 								relname)));
- 			else
- 				ereport(ERROR,
- 						(errcode(ERRCODE_LOCK_NOT_AVAILABLE),
- 					  errmsg("could not obtain lock on relation with OID %u",
- 							 relationId)));
- 		}
- 	}
- 
- 	/* The relcache does all the real work... */
- 	r = RelationIdGetRelation(relationId);
- 
- 	if (!RelationIsValid(r))
- 		elog(ERROR, "could not open relation with OID %u", relationId);
- 
- 	pgstat_initstats(r);
- 
- 	return r;
- }
  
  /* ----------------
   *		relation_openrv - open any relation specified by a RangeVar
--- 915,920 ----
***************
*** 968,974 ****
  	relOid = RangeVarGetRelid(relation, false);
  
  	/* Let relation_open do the rest */
! 	return relation_open(relOid, lockmode);
  }
  
  /* ----------------
--- 946,952 ----
  	relOid = RangeVarGetRelid(relation, false);
  
  	/* Let relation_open do the rest */
! 	return relation_open(relOid, lockmode, true);
  }
  
  /* ----------------
***************
*** 1008,1014 ****
  {
  	Relation	r;
  
! 	r = relation_open(relationId, lockmode);
  
  	if (r->rd_rel->relkind == RELKIND_INDEX)
  		ereport(ERROR,
--- 986,992 ----
  {
  	Relation	r;
  
! 	r = relation_open(relationId, lockmode, true);
  
  	if (r->rd_rel->relkind == RELKIND_INDEX)
  		ereport(ERROR,
Index: src/backend/access/index/indexam.c
===================================================================
RCS file: /home/postgres/cvsrepo/pgsql/src/backend/access/index/indexam.c,v
retrieving revision 1.99
diff -c -r1.99 indexam.c
*** src/backend/access/index/indexam.c	20 Sep 2007 17:56:30 -0000	1.99
--- src/backend/access/index/indexam.c	28 Sep 2007 02:29:34 -0000
***************
*** 138,144 ****
  {
  	Relation	r;
  
! 	r = relation_open(relationId, lockmode);
  
  	if (r->rd_rel->relkind != RELKIND_INDEX)
  		ereport(ERROR,
--- 138,144 ----
  {
  	Relation	r;
  
! 	r = relation_open(relationId, lockmode, true);
  
  	if (r->rd_rel->relkind != RELKIND_INDEX)
  		ereport(ERROR,
Index: src/backend/catalog/heap.c
===================================================================
RCS file: /home/postgres/cvsrepo/pgsql/src/backend/catalog/heap.c,v
retrieving revision 1.323
diff -c -r1.323 heap.c
*** src/backend/catalog/heap.c	8 Sep 2007 20:31:14 -0000	1.323
--- src/backend/catalog/heap.c	28 Sep 2007 02:28:46 -0000
***************
*** 437,443 ****
  		TupleDesc tupdesc;
  		int i;
  
! 		relation = relation_open(get_typ_typrelid(atttypid), AccessShareLock);
  
  		tupdesc = RelationGetDescr(relation);
  
--- 437,443 ----
  		TupleDesc tupdesc;
  		int i;
  
! 		relation = relation_open(get_typ_typrelid(atttypid), AccessShareLock, true);
  
  		tupdesc = RelationGetDescr(relation);
  
***************
*** 1131,1137 ****
  	 * when cascading from a drop of some other object, we may not have any
  	 * lock.)
  	 */
! 	rel = relation_open(relid, AccessExclusiveLock);
  
  	attr_rel = heap_open(AttributeRelationId, RowExclusiveLock);
  
--- 1131,1137 ----
  	 * when cascading from a drop of some other object, we may not have any
  	 * lock.)
  	 */
! 	rel = relation_open(relid, AccessExclusiveLock, true);
  
  	attr_rel = heap_open(AttributeRelationId, RowExclusiveLock);
  
***************
*** 1292,1298 ****
  	myattnum = ((Form_pg_attrdef) GETSTRUCT(tuple))->adnum;
  
  	/* Get an exclusive lock on the relation owning the attribute */
! 	myrel = relation_open(myrelid, AccessExclusiveLock);
  
  	/* Now we can delete the pg_attrdef row */
  	simple_heap_delete(attrdef_rel, &tuple->t_self);
--- 1292,1298 ----
  	myattnum = ((Form_pg_attrdef) GETSTRUCT(tuple))->adnum;
  
  	/* Get an exclusive lock on the relation owning the attribute */
! 	myrel = relation_open(myrelid, AccessExclusiveLock, true);
  
  	/* Now we can delete the pg_attrdef row */
  	simple_heap_delete(attrdef_rel, &tuple->t_self);
***************
*** 1345,1351 ****
  	/*
  	 * Open and lock the relation.
  	 */
! 	rel = relation_open(relid, AccessExclusiveLock);
  
  	/*
  	 * Schedule unlinking of the relation's physical file at commit.
--- 1345,1351 ----
  	/*
  	 * Open and lock the relation.
  	 */
! 	rel = relation_open(relid, AccessExclusiveLock, true);
  
  	/*
  	 * Schedule unlinking of the relation's physical file at commit.
Index: src/backend/commands/lockcmds.c
===================================================================
RCS file: /home/postgres/cvsrepo/pgsql/src/backend/commands/lockcmds.c,v
retrieving revision 1.16
diff -c -r1.16 lockcmds.c
*** src/backend/commands/lockcmds.c	5 Jan 2007 22:19:26 -0000	1.16
--- src/backend/commands/lockcmds.c	28 Sep 2007 02:41:55 -0000
***************
*** 59,68 ****
  			aclcheck_error(aclresult, ACL_KIND_CLASS,
  						   get_rel_name(reloid));
  
! 		if (lockstmt->nowait)
! 			rel = relation_open_nowait(reloid, lockstmt->mode);
! 		else
! 			rel = relation_open(reloid, lockstmt->mode);
  
  		/* Currently, we only allow plain tables to be locked */
  		if (rel->rd_rel->relkind != RELKIND_RELATION)
--- 59,65 ----
  			aclcheck_error(aclresult, ACL_KIND_CLASS,
  						   get_rel_name(reloid));
  
! 		rel = relation_open(reloid, lockstmt->mode, !lockstmt->nowait);
  
  		/* Currently, we only allow plain tables to be locked */
  		if (rel->rd_rel->relkind != RELKIND_RELATION)
Index: src/backend/commands/sequence.c
===================================================================
RCS file: /home/postgres/cvsrepo/pgsql/src/backend/commands/sequence.c,v
retrieving revision 1.146
diff -c -r1.146 sequence.c
*** src/backend/commands/sequence.c	20 Sep 2007 17:56:31 -0000	1.146
--- src/backend/commands/sequence.c	28 Sep 2007 02:36:31 -0000
***************
*** 853,859 ****
  	}
  
  	/* We now know we have AccessShareLock, and can safely open the rel */
! 	return relation_open(seq->relid, NoLock);
  }
  
  /*
--- 853,859 ----
  	}
  
  	/* We now know we have AccessShareLock, and can safely open the rel */
! 	return relation_open(seq->relid, NoLock, true);
  }
  
  /*
Index: src/backend/commands/tablecmds.c
===================================================================
RCS file: /home/postgres/cvsrepo/pgsql/src/backend/commands/tablecmds.c,v
retrieving revision 1.232
diff -c -r1.232 tablecmds.c
*** src/backend/commands/tablecmds.c	6 Sep 2007 17:31:58 -0000	1.232
--- src/backend/commands/tablecmds.c	28 Sep 2007 02:32:33 -0000
***************
*** 448,454 ****
  	 * the new rel anyway until we commit), but it keeps the lock manager from
  	 * complaining about deadlock risks.
  	 */
! 	rel = relation_open(relationId, AccessExclusiveLock);
  
  	/*
  	 * Now add any newly specified column default values and CHECK constraints
--- 448,454 ----
  	 * the new rel anyway until we commit), but it keeps the lock manager from
  	 * complaining about deadlock risks.
  	 */
! 	rel = relation_open(relationId, AccessExclusiveLock, true);
  
  	/*
  	 * Now add any newly specified column default values and CHECK constraints
***************
*** 629,635 ****
  		 */
  		if (OidIsValid(toast_relid))
  		{
! 			rel = relation_open(toast_relid, AccessExclusiveLock);
  			setNewRelfilenode(rel, RecentXmin);
  			heap_close(rel, NoLock);
  		}
--- 629,635 ----
  		 */
  		if (OidIsValid(toast_relid))
  		{
! 			rel = relation_open(toast_relid, AccessExclusiveLock, true);
  			setNewRelfilenode(rel, RecentXmin);
  			heap_close(rel, NoLock);
  		}
***************
*** 1441,1447 ****
  	 * Grab an exclusive lock on the target table, which we will NOT release
  	 * until end of transaction.
  	 */
! 	targetrelation = relation_open(myrelid, AccessExclusiveLock);
  
  	/*
  	 * permissions checking.  this would normally be done in utility.c, but
--- 1441,1447 ----
  	 * Grab an exclusive lock on the target table, which we will NOT release
  	 * until end of transaction.
  	 */
! 	targetrelation = relation_open(myrelid, AccessExclusiveLock, true);
  
  	/*
  	 * permissions checking.  this would normally be done in utility.c, but
***************
*** 1637,1643 ****
  	 * Grab an exclusive lock on the target table, index, sequence or
  	 * view, which we will NOT release until end of transaction.
  	 */
! 	targetrelation = relation_open(myrelid, AccessExclusiveLock);
  
  	oldrelname = pstrdup(RelationGetRelationName(targetrelation));
  	namespaceId = RelationGetNamespace(targetrelation);
--- 1637,1643 ----
  	 * Grab an exclusive lock on the target table, index, sequence or
  	 * view, which we will NOT release until end of transaction.
  	 */
! 	targetrelation = relation_open(myrelid, AccessExclusiveLock, true);
  
  	oldrelname = pstrdup(RelationGetRelationName(targetrelation));
  	namespaceId = RelationGetNamespace(targetrelation);
***************
*** 1786,1792 ****
  void
  AlterTableInternal(Oid relid, List *cmds, bool recurse)
  {
! 	Relation rel = relation_open(relid, AccessExclusiveLock);
  
  	ATController(rel, cmds, recurse);
  }
--- 1786,1792 ----
  void
  AlterTableInternal(Oid relid, List *cmds, bool recurse)
  {
! 	Relation rel = relation_open(relid, AccessExclusiveLock, true);
  
  	ATController(rel, cmds, recurse);
  }
***************
*** 2041,2047 ****
  			/*
  			 * Exclusive lock was obtained by phase 1, needn't get it again
  			 */
! 			rel = relation_open(tab->relid, NoLock);
  
  			foreach(lcmd, subcmds)
  				ATExecCmd(tab, rel, (AlterTableCmd *) lfirst(lcmd));
--- 2041,2047 ----
  			/*
  			 * Exclusive lock was obtained by phase 1, needn't get it again
  			 */
! 			rel = relation_open(tab->relid, NoLock, true);
  
  			foreach(lcmd, subcmds)
  				ATExecCmd(tab, rel, (AlterTableCmd *) lfirst(lcmd));
***************
*** 2783,2789 ****
  
  			if (childrelid == relid)
  				continue;
! 			childrel = relation_open(childrelid, AccessExclusiveLock);
  			/* check for child relation in use in this session */
  			if (childrel->rd_refcnt != 1)
  				ereport(ERROR,
--- 2783,2789 ----
  
  			if (childrelid == relid)
  				continue;
! 			childrel = relation_open(childrelid, AccessExclusiveLock, true);
  			/* check for child relation in use in this session */
  			if (childrel->rd_refcnt != 1)
  				ereport(ERROR,
***************
*** 2820,2826 ****
  		Oid			childrelid = lfirst_oid(child);
  		Relation	childrel;
  
! 		childrel = relation_open(childrelid, AccessExclusiveLock);
  		/* check for child relation in use in this session */
  		if (childrel->rd_refcnt != 1)
  			ereport(ERROR,
--- 2820,2826 ----
  		Oid			childrelid = lfirst_oid(child);
  		Relation	childrel;
  
! 		childrel = relation_open(childrelid, AccessExclusiveLock, true);
  		/* check for child relation in use in this session */
  		if (childrel->rd_refcnt != 1)
  			ereport(ERROR,
***************
*** 2888,2894 ****
  			pg_depend->objsubid <= 0)
  			continue;
  
! 		rel = relation_open(pg_depend->objid, AccessShareLock);
  		att = rel->rd_att->attrs[pg_depend->objsubid - 1];
  
  		if (rel->rd_rel->relkind == RELKIND_RELATION)
--- 2888,2894 ----
  			pg_depend->objsubid <= 0)
  			continue;
  
! 		rel = relation_open(pg_depend->objid, AccessShareLock, true);
  		att = rel->rd_att->attrs[pg_depend->objsubid - 1];
  
  		if (rel->rd_rel->relkind == RELKIND_RELATION)
***************
*** 5373,5379 ****
  	 * Get exclusive lock till end of transaction on the target table. Use
  	 * relation_open so that we can work on indexes and sequences.
  	 */
! 	target_rel = relation_open(relationOid, AccessExclusiveLock);
  
  	/* Get its pg_class tuple, too */
  	class_rel = heap_open(RelationRelationId, RowExclusiveLock);
--- 5373,5379 ----
  	 * Get exclusive lock till end of transaction on the target table. Use
  	 * relation_open so that we can work on indexes and sequences.
  	 */
! 	target_rel = relation_open(relationOid, AccessExclusiveLock, true);
  
  	/* Get its pg_class tuple, too */
  	class_rel = heap_open(RelationRelationId, RowExclusiveLock);
***************
*** 5613,5619 ****
  			continue;
  
  		/* Use relation_open just in case it's an index */
! 		seqRel = relation_open(depForm->objid, AccessExclusiveLock);
  
  		/* skip non-sequence relations */
  		if (RelationGetForm(seqRel)->relkind != RELKIND_SEQUENCE)
--- 5613,5619 ----
  			continue;
  
  		/* Use relation_open just in case it's an index */
! 		seqRel = relation_open(depForm->objid, AccessExclusiveLock, true);
  
  		/* skip non-sequence relations */
  		if (RelationGetForm(seqRel)->relkind != RELKIND_SEQUENCE)
***************
*** 5804,5810 ****
  	/*
  	 * Need lock here in case we are recursing to toast table or index
  	 */
! 	rel = relation_open(tableOid, AccessExclusiveLock);
  
  	/*
  	 * We can never allow moving of shared or nailed-in-cache relations,
--- 5804,5810 ----
  	/*
  	 * Need lock here in case we are recursing to toast table or index
  	 */
! 	rel = relation_open(tableOid, AccessExclusiveLock, true);
  
  	/*
  	 * We can never allow moving of shared or nailed-in-cache relations,
***************
*** 6676,6682 ****
  			continue;
  
  		/* Use relation_open just in case it's an index */
! 		seqRel = relation_open(depForm->objid, AccessExclusiveLock);
  
  		/* skip non-sequence relations */
  		if (RelationGetForm(seqRel)->relkind != RELKIND_SEQUENCE)
--- 6676,6682 ----
  			continue;
  
  		/* Use relation_open just in case it's an index */
! 		seqRel = relation_open(depForm->objid, AccessExclusiveLock, true);
  
  		/* skip non-sequence relations */
  		if (RelationGetForm(seqRel)->relkind != RELKIND_SEQUENCE)
Index: src/backend/commands/typecmds.c
===================================================================
RCS file: /home/postgres/cvsrepo/pgsql/src/backend/commands/typecmds.c,v
retrieving revision 1.107
diff -c -r1.107 typecmds.c
*** src/backend/commands/typecmds.c	4 Sep 2007 16:41:42 -0000	1.107
--- src/backend/commands/typecmds.c	28 Sep 2007 02:39:19 -0000
***************
*** 1965,1971 ****
  			Relation	rel;
  
  			/* Acquire requested lock on relation */
! 			rel = relation_open(pg_depend->objid, lockmode);
  
  			/*
  			 * Check to see if rowtype is stored anyplace as a composite-type
--- 1965,1971 ----
  			Relation	rel;
  
  			/* Acquire requested lock on relation */
! 			rel = relation_open(pg_depend->objid, lockmode, true);
  
  			/*
  			 * Check to see if rowtype is stored anyplace as a composite-type
Index: src/backend/commands/view.c
===================================================================
RCS file: /home/postgres/cvsrepo/pgsql/src/backend/commands/view.c,v
retrieving revision 1.102
diff -c -r1.102 view.c
*** src/backend/commands/view.c	27 Aug 2007 03:36:08 -0000	1.102
--- src/backend/commands/view.c	28 Sep 2007 02:38:46 -0000
***************
*** 151,157 ****
  		/*
  		 * Yes.  Get exclusive lock on the existing view ...
  		 */
! 		rel = relation_open(viewOid, AccessExclusiveLock);
  
  		/*
  		 * Make sure it *is* a view, and do permissions checks.
--- 151,157 ----
  		/*
  		 * Yes.  Get exclusive lock on the existing view ...
  		 */
! 		rel = relation_open(viewOid, AccessExclusiveLock, true);
  
  		/*
  		 * Make sure it *is* a view, and do permissions checks.
***************
*** 314,320 ****
  	viewParse = (Query *) copyObject(viewParse);
  
  	/* need to open the rel for addRangeTableEntryForRelation */
! 	viewRel = relation_open(viewOid, AccessShareLock);
  
  	/*
  	 * Create the 2 new range table entries and form the new range table...
--- 314,320 ----
  	viewParse = (Query *) copyObject(viewParse);
  
  	/* need to open the rel for addRangeTableEntryForRelation */
! 	viewRel = relation_open(viewOid, AccessShareLock, true);
  
  	/*
  	 * Create the 2 new range table entries and form the new range table...
Index: src/backend/parser/parse_relation.c
===================================================================
RCS file: /home/postgres/cvsrepo/pgsql/src/backend/parser/parse_relation.c,v
retrieving revision 1.128
diff -c -r1.128 parse_relation.c
*** src/backend/parser/parse_relation.c	6 Sep 2007 17:31:58 -0000	1.128
--- src/backend/parser/parse_relation.c	28 Sep 2007 02:42:59 -0000
***************
*** 1413,1419 ****
  	Relation	rel;
  
  	/* Get the tupledesc and turn it over to expandTupleDesc */
! 	rel = relation_open(relid, AccessShareLock);
  	expandTupleDesc(rel->rd_att, eref, rtindex, sublevels_up, include_dropped,
  					colnames, colvars);
  	relation_close(rel, AccessShareLock);
--- 1413,1419 ----
  	Relation	rel;
  
  	/* Get the tupledesc and turn it over to expandTupleDesc */
! 	rel = relation_open(relid, AccessShareLock, true);
  	expandTupleDesc(rel->rd_att, eref, rtindex, sublevels_up, include_dropped,
  					colnames, colvars);
  	relation_close(rel, AccessShareLock);
Index: src/backend/utils/adt/dbsize.c
===================================================================
RCS file: /home/postgres/cvsrepo/pgsql/src/backend/utils/adt/dbsize.c,v
retrieving revision 1.14
diff -c -r1.14 dbsize.c
*** src/backend/utils/adt/dbsize.c	29 Aug 2007 17:24:29 -0000	1.14
--- src/backend/utils/adt/dbsize.c	28 Sep 2007 02:45:06 -0000
***************
*** 289,295 ****
  	Relation	rel;
  	int64		size;
  
! 	rel = relation_open(relOid, AccessShareLock);
  
  	size = calculate_relation_size(&(rel->rd_node));
  
--- 289,295 ----
  	Relation	rel;
  	int64		size;
  
! 	rel = relation_open(relOid, AccessShareLock, true);
  
  	size = calculate_relation_size(&(rel->rd_node));
  
***************
*** 329,335 ****
  	int64		size;
  	ListCell   *cell;
  
! 	heapRel = relation_open(Relid, AccessShareLock);
  	toastOid = heapRel->rd_rel->reltoastrelid;
  
  	/* Get the heap size */
--- 329,335 ----
  	int64		size;
  	ListCell   *cell;
  
! 	heapRel = relation_open(Relid, AccessShareLock, true);
  	toastOid = heapRel->rd_rel->reltoastrelid;
  
  	/* Get the heap size */
***************
*** 345,351 ****
  			Oid			idxOid = lfirst_oid(cell);
  			Relation	iRel;
  
! 			iRel = relation_open(idxOid, AccessShareLock);
  
  			size += calculate_relation_size(&(iRel->rd_node));
  
--- 345,351 ----
  			Oid			idxOid = lfirst_oid(cell);
  			Relation	iRel;
  
! 			iRel = relation_open(idxOid, AccessShareLock, true);
  
  			size += calculate_relation_size(&(iRel->rd_node));
  
Index: src/backend/utils/cache/typcache.c
===================================================================
RCS file: /home/postgres/cvsrepo/pgsql/src/backend/utils/cache/typcache.c,v
retrieving revision 1.25
diff -c -r1.25 typcache.c
*** src/backend/utils/cache/typcache.c	2 Apr 2007 03:49:39 -0000	1.25
--- src/backend/utils/cache/typcache.c	28 Sep 2007 02:44:27 -0000
***************
*** 282,288 ****
  		if (!OidIsValid(typentry->typrelid))	/* should not happen */
  			elog(ERROR, "invalid typrelid for composite type %u",
  				 typentry->type_id);
! 		rel = relation_open(typentry->typrelid, AccessShareLock);
  		Assert(rel->rd_rel->reltype == typentry->type_id);
  
  		/*
--- 282,288 ----
  		if (!OidIsValid(typentry->typrelid))	/* should not happen */
  			elog(ERROR, "invalid typrelid for composite type %u",
  				 typentry->type_id);
! 		rel = relation_open(typentry->typrelid, AccessShareLock, true);
  		Assert(rel->rd_rel->reltype == typentry->type_id);
  
  		/*
Index: src/include/access/heapam.h
===================================================================
RCS file: /home/postgres/cvsrepo/pgsql/src/include/access/heapam.h,v
retrieving revision 1.127
diff -c -r1.127 heapam.h
*** src/include/access/heapam.h	20 Sep 2007 17:56:32 -0000	1.127
--- src/include/access/heapam.h	28 Sep 2007 02:26:52 -0000
***************
*** 128,136 ****
   */
  
  /* in heap/heapam.c */
! extern Relation relation_open(Oid relationId, LOCKMODE lockmode);
  extern Relation try_relation_open(Oid relationId, LOCKMODE lockmode);
- extern Relation relation_open_nowait(Oid relationId, LOCKMODE lockmode);
  extern Relation relation_openrv(const RangeVar *relation, LOCKMODE lockmode);
  extern void relation_close(Relation relation, LOCKMODE lockmode);
  
--- 128,135 ----
   */
  
  /* in heap/heapam.c */
! extern Relation relation_open(Oid relationId, LOCKMODE lockmode, bool wait);
  extern Relation try_relation_open(Oid relationId, LOCKMODE lockmode);
  extern Relation relation_openrv(const RangeVar *relation, LOCKMODE lockmode);
  extern void relation_close(Relation relation, LOCKMODE lockmode);
  
Index: src/pl/plpgsql/src/pl_comp.c
===================================================================
RCS file: /home/postgres/cvsrepo/pgsql/src/pl/plpgsql/src/pl_comp.c,v
retrieving revision 1.117
diff -c -r1.117 pl_comp.c
*** src/pl/plpgsql/src/pl_comp.c	16 Jul 2007 17:01:10 -0000	1.117
--- src/pl/plpgsql/src/pl_comp.c	28 Sep 2007 02:45:32 -0000
***************
*** 1593,1599 ****
  	/*
  	 * Open the relation to get info.
  	 */
! 	rel = relation_open(classOid, AccessShareLock);
  	classStruct = RelationGetForm(rel);
  	relname = RelationGetRelationName(rel);
  
--- 1593,1599 ----
  	/*
  	 * Open the relation to get info.
  	 */
! 	rel = relation_open(classOid, AccessShareLock, true);
  	classStruct = RelationGetForm(rel);
  	relname = RelationGetRelationName(rel);
  
---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend

Reply via email to