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
bool nulls[Natts_pg_proc];
Datum values[Natts_pg_proc];
bool replaces[Natts_pg_proc];
- Oid relid;
NameData procname;
TupleDesc tupDesc;
bool is_update;
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)
{
/*