From 45e98ee730621fd34d0a132343cb3f906ccc8416 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 18 Jun 2018 11:57:33 -0400 Subject: [PATCH] Remove obsolete prohibition on function name matching a column name. ProcedureCreate formerly threw an error if the function to be created has one argument of composite type and the function name matches some column of the composite type. This was a (very non-bulletproof) defense against creating situations where f(x) and x.f are ambiguous. But we don't really need such a defense in the wake of commit b97a3465d, which allows us to deal with such situations fairly cleanly. This behavior also created a dump-and-reload hazard, since a function might be rejected if a conflicting column name had been added to the input composite type later. Hence, let's just drop the check. Discussion: https://postgr.es/m/CAOW5sYa3Wp7KozCuzjOdw6PiOYPi6D=VvRybtH2S=2C0SVmRmA@mail.gmail.com --- src/backend/catalog/pg_proc.c | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/src/backend/catalog/pg_proc.c b/src/backend/catalog/pg_proc.c index d783352911..9b4015d0d4 100644 --- a/src/backend/catalog/pg_proc.c +++ b/src/backend/catalog/pg_proc.c @@ -108,7 +108,6 @@ ProcedureCreate(const char *procedureName, bool nulls[Natts_pg_proc]; Datum values[Natts_pg_proc]; bool replaces[Natts_pg_proc]; - Oid relid; NameData procname; TupleDesc tupDesc; bool is_update; @@ -254,20 +253,6 @@ ProcedureCreate(const char *procedureName, errmsg("unsafe use of pseudo-type \"internal\""), errdetail("A function returning \"internal\" must have at least one \"internal\" argument."))); - /* - * don't allow functions of complex types that have the same name as - * existing attributes of the type - */ - if (parameterCount == 1 && - OidIsValid(parameterTypes->values[0]) && - (relid = typeOrDomainTypeRelid(parameterTypes->values[0])) != InvalidOid && - get_attnum(relid, procedureName) != InvalidAttrNumber) - ereport(ERROR, - (errcode(ERRCODE_DUPLICATE_COLUMN), - errmsg("\"%s\" is already an attribute of type %s", - procedureName, - format_type_be(parameterTypes->values[0])))); - if (paramModes != NULL) { /* -- 2.40.0