diff options
author | Robert Haas <rhaas@postgresql.org> | 2010-11-26 17:27:23 -0500 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2010-11-26 17:31:54 -0500 |
commit | 55109313f96fb5c7d671fe8954b6f7fc0cca9631 (patch) | |
tree | fdd483d66b324def736cec69770ece27c93b6b0e /src/backend/commands/operatorcmds.c | |
parent | 1d9a0abec1224193fea3acf766b587fc3963a3b8 (diff) | |
download | postgresql-55109313f96fb5c7d671fe8954b6f7fc0cca9631.tar.gz postgresql-55109313f96fb5c7d671fe8954b6f7fc0cca9631.zip |
Add more ALTER <object> .. SET SCHEMA commands.
This adds support for changing the schema of a conversion, operator,
operator class, operator family, text search configuration, text search
dictionary, text search parser, or text search template.
Dimitri Fontaine, with assorted corrections and other kibitzing.
Diffstat (limited to 'src/backend/commands/operatorcmds.c')
-rw-r--r-- | src/backend/commands/operatorcmds.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/backend/commands/operatorcmds.c b/src/backend/commands/operatorcmds.c index 503cf0f23db..2578eaf4f88 100644 --- a/src/backend/commands/operatorcmds.c +++ b/src/backend/commands/operatorcmds.c @@ -39,7 +39,9 @@ #include "catalog/indexing.h" #include "catalog/namespace.h" #include "catalog/pg_operator.h" +#include "catalog/pg_namespace.h" #include "catalog/pg_type.h" +#include "commands/alter.h" #include "commands/defrem.h" #include "miscadmin.h" #include "parser/parse_func.h" @@ -452,3 +454,35 @@ AlterOperatorOwner_internal(Relation rel, Oid operOid, Oid newOwnerId) heap_freetuple(tup); } + +/* + * Execute ALTER OPERATOR SET SCHEMA + */ +void +AlterOperatorNamespace(List *names, List *argtypes, const char *newschema) +{ + List *operatorName = names; + TypeName *typeName1 = (TypeName *) linitial(argtypes); + TypeName *typeName2 = (TypeName *) lsecond(argtypes); + Oid operOid, nspOid; + Relation rel; + + rel = heap_open(OperatorRelationId, RowExclusiveLock); + + Assert(list_length(argtypes) == 2); + operOid = LookupOperNameTypeNames(NULL, operatorName, + typeName1, typeName2, + false, -1); + + /* get schema OID */ + nspOid = LookupCreationNamespace(newschema); + + AlterObjectNamespace(rel, OPEROID, OperatorRelationId, operOid, nspOid, + Anum_pg_operator_oprname, + Anum_pg_operator_oprnamespace, + Anum_pg_operator_oprowner, + ACL_KIND_OPER, + false); + + heap_close(rel, NoLock); +} |