diff options
Diffstat (limited to 'src/backend/catalog/index.c')
-rw-r--r-- | src/backend/catalog/index.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index debc3945ee..506fd43dca 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.202.2.1 2005/06/25 16:54:30 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.202.2.2 2008/01/03 21:25:58 tgl Exp $ * * * INTERFACE ROUTINES @@ -1439,6 +1439,8 @@ index_build(Relation heapRelation, IndexInfo *indexInfo) { RegProcedure procedure; + Oid save_userid; + bool save_secdefcxt; /* * sanity checks @@ -1450,12 +1452,22 @@ index_build(Relation heapRelation, Assert(RegProcedureIsValid(procedure)); /* + * Switch to the table owner's userid, so that any index functions are + * run as that user. + */ + GetUserIdAndContext(&save_userid, &save_secdefcxt); + SetUserIdAndContext(heapRelation->rd_rel->relowner, true); + + /* * Call the access method's build procedure */ OidFunctionCall3(procedure, PointerGetDatum(heapRelation), PointerGetDatum(indexRelation), PointerGetDatum(indexInfo)); + + /* Restore userid */ + SetUserIdAndContext(save_userid, save_secdefcxt); } |