/* *AlthoughCOMMENTONFUNCTION,SECURITYLABELONFUNCTION,etc.are *happytooperateonanaggregateasonanyotherfunction,wehave *historicallynotallowedthisforDROPFUNCTION.
*/ if (stmt->removeType == OBJECT_FUNCTION)
{ if (get_func_prokind(address.objectId) == PROKIND_AGGREGATE)
ereport(ERROR,
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
errmsg("\"%s\" is an aggregate function",
NameListToString(castNode(ObjectWithArgs, object)->objname)),
errhint("Use DROP AGGREGATE to drop aggregate functions.")));
}
if (typeName != NULL)
{ if (!OidIsValid(LookupTypeNameOid(NULL, typeName, true)))
{ /* type doesn't exist, try to find why */ if (schema_does_not_exist_skipping(typeName->names, msg, name)) returntrue;
*msg = gettext_noop("type \"%s\" does not exist, skipping");
*name = TypeNameToString(typeName);
switch (objtype)
{ case OBJECT_ACCESS_METHOD:
msg = gettext_noop("access method \"%s\" does not exist, skipping");
name = strVal(object); break; case OBJECT_TYPE: case OBJECT_DOMAIN:
{ TypeName *typ = castNode(TypeName, object);
if (!schema_does_not_exist_skipping(typ->names, &msg, &name))
{
msg = gettext_noop("type \"%s\" does not exist, skipping");
name = TypeNameToString(typ);
}
} break; case OBJECT_COLLATION: if (!schema_does_not_exist_skipping(castNode(List, object), &msg, &name))
{
msg = gettext_noop("collation \"%s\" does not exist, skipping");
name = NameListToString(castNode(List, object));
} break; case OBJECT_CONVERSION: if (!schema_does_not_exist_skipping(castNode(List, object), &msg, &name))
{
msg = gettext_noop("conversion \"%s\" does not exist, skipping");
name = NameListToString(castNode(List, object));
} break; case OBJECT_SCHEMA:
msg = gettext_noop("schema \"%s\" does not exist, skipping");
name = strVal(object); break; case OBJECT_STATISTIC_EXT: if (!schema_does_not_exist_skipping(castNode(List, object), &msg, &name))
{
msg = gettext_noop("statistics object \"%s\" does not exist, skipping");
name = NameListToString(castNode(List, object));
} break; case OBJECT_TSPARSER: if (!schema_does_not_exist_skipping(castNode(List, object), &msg, &name))
{
msg = gettext_noop("text search parser \"%s\" does not exist, skipping");
name = NameListToString(castNode(List, object));
} break; case OBJECT_TSDICTIONARY: if (!schema_does_not_exist_skipping(castNode(List, object), &msg, &name))
{
msg = gettext_noop("text search dictionary \"%s\" does not exist, skipping");
name = NameListToString(castNode(List, object));
} break; case OBJECT_TSTEMPLATE: if (!schema_does_not_exist_skipping(castNode(List, object), &msg, &name))
{
msg = gettext_noop("text search template \"%s\" does not exist, skipping");
name = NameListToString(castNode(List, object));
} break; case OBJECT_TSCONFIGURATION: if (!schema_does_not_exist_skipping(castNode(List, object), &msg, &name))
{
msg = gettext_noop("text search configuration \"%s\" does not exist, skipping");
name = NameListToString(castNode(List, object));
} break; case OBJECT_EXTENSION:
msg = gettext_noop("extension \"%s\" does not exist, skipping");
name = strVal(object); break; case OBJECT_FUNCTION:
{
ObjectWithArgs *owa = castNode(ObjectWithArgs, object);
if (!schema_does_not_exist_skipping(owa->objname, &msg, &name) &&
!type_in_list_does_not_exist_skipping(owa->objargs, &msg, &name))
{
msg = gettext_noop("function %s(%s) does not exist, skipping");
name = NameListToString(owa->objname);
args = TypeNameListToString(owa->objargs);
} break;
} case OBJECT_PROCEDURE:
{
ObjectWithArgs *owa = castNode(ObjectWithArgs, object);
if (!schema_does_not_exist_skipping(owa->objname, &msg, &name) &&
!type_in_list_does_not_exist_skipping(owa->objargs, &msg, &name))
{
msg = gettext_noop("procedure %s(%s) does not exist, skipping");
name = NameListToString(owa->objname);
args = TypeNameListToString(owa->objargs);
} break;
} case OBJECT_ROUTINE:
{
ObjectWithArgs *owa = castNode(ObjectWithArgs, object);
if (!schema_does_not_exist_skipping(owa->objname, &msg, &name) &&
!type_in_list_does_not_exist_skipping(owa->objargs, &msg, &name))
{
msg = gettext_noop("routine %s(%s) does not exist, skipping");
name = NameListToString(owa->objname);
args = TypeNameListToString(owa->objargs);
} break;
} case OBJECT_AGGREGATE:
{
ObjectWithArgs *owa = castNode(ObjectWithArgs, object);
if (!schema_does_not_exist_skipping(owa->objname, &msg, &name) &&
!type_in_list_does_not_exist_skipping(owa->objargs, &msg, &name))
{
msg = gettext_noop("aggregate %s(%s) does not exist, skipping");
name = NameListToString(owa->objname);
args = TypeNameListToString(owa->objargs);
} break;
} case OBJECT_OPERATOR:
{
ObjectWithArgs *owa = castNode(ObjectWithArgs, object);
if (!schema_does_not_exist_skipping(owa->objname, &msg, &name) &&
!type_in_list_does_not_exist_skipping(owa->objargs, &msg, &name))
{
msg = gettext_noop("operator %s does not exist, skipping");
name = NameListToString(owa->objname);
} break;
} case OBJECT_LANGUAGE:
msg = gettext_noop("language \"%s\" does not exist, skipping");
name = strVal(object); break; case OBJECT_CAST:
{ if (!type_in_list_does_not_exist_skipping(list_make1(linitial(castNode(List, object))), &msg, &name) &&
!type_in_list_does_not_exist_skipping(list_make1(lsecond(castNode(List, object))), &msg, &name))
{ /* XXX quote or no quote? */
msg = gettext_noop("cast from type %s to type %s does not exist, skipping");
name = TypeNameToString(linitial_node(TypeName, castNode(List, object)));
args = TypeNameToString(lsecond_node(TypeName, castNode(List, object)));
}
} break; case OBJECT_TRANSFORM: if (!type_in_list_does_not_exist_skipping(list_make1(linitial(castNode(List, object))), &msg, &name))
{
msg = gettext_noop("transform for type %s language \"%s\" does not exist, skipping");
name = TypeNameToString(linitial_node(TypeName, castNode(List, object)));
args = strVal(lsecond(castNode(List, object)));
} break; case OBJECT_TRIGGER: if (!owningrel_does_not_exist_skipping(castNode(List, object), &msg, &name))
{
msg = gettext_noop("trigger \"%s\" for relation \"%s\" does not exist, skipping");
name = strVal(llast(castNode(List, object)));
args = NameListToString(list_copy_head(castNode(List, object),
list_length(castNode(List, object)) - 1));
} break; case OBJECT_POLICY: if (!owningrel_does_not_exist_skipping(castNode(List, object), &msg, &name))
{
msg = gettext_noop("policy \"%s\" for relation \"%s\" does not exist, skipping");
name = strVal(llast(castNode(List, object)));
args = NameListToString(list_copy_head(castNode(List, object),
list_length(castNode(List, object)) - 1));
} break; case OBJECT_EVENT_TRIGGER:
msg = gettext_noop("event trigger \"%s\" does not exist, skipping");
name = strVal(object); break; case OBJECT_RULE: if (!owningrel_does_not_exist_skipping(castNode(List, object), &msg, &name))
{
msg = gettext_noop("rule \"%s\" for relation \"%s\" does not exist, skipping");
name = strVal(llast(castNode(List, object)));
args = NameListToString(list_copy_head(castNode(List, object),
list_length(castNode(List, object)) - 1));
} break; case OBJECT_FDW:
msg = gettext_noop("foreign-data wrapper \"%s\" does not exist, skipping");
name = strVal(object); break; case OBJECT_FOREIGN_SERVER:
msg = gettext_noop("server \"%s\" does not exist, skipping");
name = strVal(object); break; case OBJECT_OPCLASS:
{
List *opcname = list_copy_tail(castNode(List, object), 1);
if (!schema_does_not_exist_skipping(opcname, &msg, &name))
{
msg = gettext_noop("operator class \"%s\" does not exist for access method \"%s\", skipping");
name = NameListToString(opcname);
args = strVal(linitial(castNode(List, object)));
}
} break; case OBJECT_OPFAMILY:
{
List *opfname = list_copy_tail(castNode(List, object), 1);
if (!schema_does_not_exist_skipping(opfname, &msg, &name))
{
msg = gettext_noop("operator family \"%s\" does not exist for access method \"%s\", skipping");
name = NameListToString(opfname);
args = strVal(linitial(castNode(List, object)));
}
} break; case OBJECT_PUBLICATION:
msg = gettext_noop("publication \"%s\" does not exist, skipping");
name = strVal(object); break;
case OBJECT_COLUMN: case OBJECT_DATABASE: case OBJECT_FOREIGN_TABLE: case OBJECT_INDEX: case OBJECT_MATVIEW: case OBJECT_ROLE: case OBJECT_SEQUENCE: case OBJECT_SUBSCRIPTION: case OBJECT_TABLE: case OBJECT_TABLESPACE: case OBJECT_VIEW:
case OBJECT_AMOP: case OBJECT_AMPROC: case OBJECT_ATTRIBUTE: case OBJECT_DEFAULT: case OBJECT_DEFACL: case OBJECT_DOMCONSTRAINT: case OBJECT_LARGEOBJECT: case OBJECT_PARAMETER_ACL: case OBJECT_PUBLICATION_NAMESPACE: case OBJECT_PUBLICATION_REL: case OBJECT_TABCONSTRAINT: case OBJECT_USER_MAPPING: /* These are currently not used or needed. */
elog(ERROR, "unsupported object type: %d", (int) objtype); break;
/* no default, to let compiler warn about missing case */
} if (!msg)
elog(ERROR, "unrecognized object type: %d", (int) objtype);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.