Alvaro Herrera wrote: > The attached patch should fix the problem. I'm going to commit to 8.3 > and HEAD in a jiffy.
Really attached this time. (Thanks Stefan.) -- Alvaro Herrera http://www.CommandPrompt.com/ PostgreSQL Replication, Consulting, Custom Development, 24x7 support
Index: src/backend/catalog/pg_shdepend.c =================================================================== RCS file: /home/alvherre/Code/cvs/pgsql/src/backend/catalog/pg_shdepend.c,v retrieving revision 1.23.2.1 diff -c -p -r1.23.2.1 pg_shdepend.c *** src/backend/catalog/pg_shdepend.c 24 Mar 2008 19:12:58 -0000 1.23.2.1 --- src/backend/catalog/pg_shdepend.c 29 Apr 2008 19:08:26 -0000 *************** *** 32,37 **** --- 32,38 ---- #include "catalog/pg_type.h" #include "commands/conversioncmds.h" #include "commands/defrem.h" + #include "commands/proclang.h" #include "commands/schemacmds.h" #include "commands/tablecmds.h" #include "commands/typecmds.h" *************** shdepReassignOwned(List *roleids, Oid ne *** 1342,1347 **** --- 1343,1352 ---- AlterFunctionOwner_oid(sdepForm->objid, newrole); break; + case LanguageRelationId: + AlterLanguageOwner_oid(sdepForm->objid, newrole); + break; + default: elog(ERROR, "unexpected classid %d", sdepForm->classid); break; Index: src/backend/commands/proclang.c =================================================================== RCS file: /home/alvherre/Code/cvs/pgsql/src/backend/commands/proclang.c,v retrieving revision 1.74 diff -c -p -r1.74 proclang.c *** src/backend/commands/proclang.c 1 Jan 2008 19:45:49 -0000 1.74 --- src/backend/commands/proclang.c 29 Apr 2008 19:04:50 -0000 *************** typedef struct *** 48,53 **** --- 48,55 ---- static void create_proc_lang(const char *languageName, Oid languageOwner, Oid handlerOid, Oid valOid, bool trusted); static PLTemplate *find_language_template(const char *languageName); + static void AlterLanguageOwner_internal(HeapTuple tup, Relation rel, + Oid newOwnerId); /* --------------------------------------------------------------------- *************** AlterLanguageOwner(const char *name, Oid *** 529,535 **** { HeapTuple tup; Relation rel; - Form_pg_language lanForm; /* Translate name for consistency with CREATE */ name = case_translate_language_name(name); --- 531,536 ---- *************** AlterLanguageOwner(const char *name, Oid *** 543,548 **** --- 544,590 ---- ereport(ERROR, (errcode(ERRCODE_UNDEFINED_OBJECT), errmsg("language \"%s\" does not exist", name))); + + AlterLanguageOwner_internal(tup, rel, newOwnerId); + + ReleaseSysCache(tup); + + heap_close(rel, RowExclusiveLock); + + } + + /* + * Change language owner, specified by OID + */ + void + AlterLanguageOwner_oid(Oid oid, Oid newOwnerId) + { + HeapTuple tup; + Relation rel; + + rel = heap_open(LanguageRelationId, RowExclusiveLock); + + tup = SearchSysCache(LANGOID, + ObjectIdGetDatum(oid), + 0, 0, 0); + if (!HeapTupleIsValid(tup)) + elog(ERROR, "cache lookup failed for language %u", oid); + + AlterLanguageOwner_internal(tup, rel, newOwnerId); + + ReleaseSysCache(tup); + + heap_close(rel, RowExclusiveLock); + } + + /* + * Workhorse for AlterLanguageOwner variants + */ + static void + AlterLanguageOwner_internal(HeapTuple tup, Relation rel, Oid newOwnerId) + { + Form_pg_language lanForm; + lanForm = (Form_pg_language) GETSTRUCT(tup); /* *************** AlterLanguageOwner(const char *name, Oid *** 600,606 **** changeDependencyOnOwner(LanguageRelationId, HeapTupleGetOid(tup), newOwnerId); } - - ReleaseSysCache(tup); - heap_close(rel, RowExclusiveLock); } --- 642,645 ---- Index: src/include/commands/proclang.h =================================================================== RCS file: /home/alvherre/Code/cvs/pgsql/src/include/commands/proclang.h,v retrieving revision 1.12 diff -c -p -r1.12 proclang.h *** src/include/commands/proclang.h 26 Mar 2007 16:58:41 -0000 1.12 --- src/include/commands/proclang.h 29 Apr 2008 19:04:50 -0000 *************** extern void DropProceduralLanguage(DropP *** 16,21 **** --- 16,22 ---- extern void DropProceduralLanguageById(Oid langOid); extern void RenameLanguage(const char *oldname, const char *newname); extern void AlterLanguageOwner(const char *name, Oid newOwnerId); + extern void AlterLanguageOwner_oid(Oid oid, Oid newOwnerId); extern bool PLTemplateExists(const char *languageName); #endif /* PROCLANG_H */
-- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs