/* * Change language owner */ void AlterLanguageOwner(const char *name, Oid newOwnerId) { HeapTuple tup; Relation rel; /* Translate name for consistency with CREATE */ name = case_translate_language_name(name); rel = heap_open(LanguageRelationId, RowExclusiveLock); tup = SearchSysCache(LANGNAME, CStringGetDatum(name), 0, 0, 0); if (!HeapTupleIsValid(tup)) 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 = SearchSysCache1(LANGOID, ObjectIdGetDatum(oid)); if (!HeapTupleIsValid(tup)) elog(ERROR, "cache lookup failed for language %u", oid); AlterLanguageOwner_internal(tup, rel, newOwnerId); ReleaseSysCache(tup); heap_close(rel, RowExclusiveLock); }