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