diff --git a/src/backend/catalog/pg_proc.c b/src/backend/catalog/pg_proc.c index 599f04242f3eabd95ddec8522842c853148d9ac4..ac53b09af6badb6326c5c32ea621adab283b3555 100644 --- a/src/backend/catalog/pg_proc.c +++ b/src/backend/catalog/pg_proc.c @@ -404,7 +404,8 @@ ProcedureCreate(const char *procedureName, ereport(ERROR, (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), errmsg("cannot change return type of existing function"), - errhint("Use DROP FUNCTION first."))); + errhint("Use DROP FUNCTION %s first.", + format_procedure(HeapTupleGetOid(oldtup))))); /* * If it returns RECORD, check for possible change of record type @@ -427,7 +428,8 @@ ProcedureCreate(const char *procedureName, (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), errmsg("cannot change return type of existing function"), errdetail("Row type defined by OUT parameters is different."), - errhint("Use DROP FUNCTION first."))); + errhint("Use DROP FUNCTION %s first.", + format_procedure(HeapTupleGetOid(oldtup))))); } /* @@ -469,7 +471,8 @@ ProcedureCreate(const char *procedureName, (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), errmsg("cannot change name of input parameter \"%s\"", old_arg_names[j]), - errhint("Use DROP FUNCTION first."))); + errhint("Use DROP FUNCTION %s first.", + format_procedure(HeapTupleGetOid(oldtup))))); } } @@ -492,7 +495,8 @@ ProcedureCreate(const char *procedureName, ereport(ERROR, (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), errmsg("cannot remove parameter defaults from existing function"), - errhint("Use DROP FUNCTION first."))); + errhint("Use DROP FUNCTION %s first.", + format_procedure(HeapTupleGetOid(oldtup))))); proargdefaults = SysCacheGetAttr(PROCNAMEARGSNSP, oldtup, Anum_pg_proc_proargdefaults, @@ -518,7 +522,8 @@ ProcedureCreate(const char *procedureName, ereport(ERROR, (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), errmsg("cannot change data type of existing parameter default value"), - errhint("Use DROP FUNCTION first."))); + errhint("Use DROP FUNCTION %s first.", + format_procedure(HeapTupleGetOid(oldtup))))); newlc = lnext(newlc); } } diff --git a/src/test/regress/expected/polymorphism.out b/src/test/regress/expected/polymorphism.out index 1e879532f870c58a090cfec00df686b4bbe1981d..a65e3b998f9a5d627bbffbf7a6231ccada4bf6de 100644 --- a/src/test/regress/expected/polymorphism.out +++ b/src/test/regress/expected/polymorphism.out @@ -1026,7 +1026,7 @@ select dfunc(10,20); create or replace function dfunc(a variadic int[]) returns int as $$ select array_upper($1, 1) $$ language sql; ERROR: cannot remove parameter defaults from existing function -HINT: Use DROP FUNCTION first. +HINT: Use DROP FUNCTION dfunc(integer[]) first. \df dfunc List of functions Schema | Name | Result data type | Argument data types | Type @@ -1239,13 +1239,13 @@ returns record as $$ select $1, $2; $$ language sql; ERROR: cannot change name of input parameter "c" -HINT: Use DROP FUNCTION first. +HINT: Use DROP FUNCTION dfunc(character varying,numeric) first. create or replace function dfunc(a varchar = 'def a', out _a varchar, numeric = NULL, out _c numeric) returns record as $$ select $1, $2; $$ language sql; ERROR: cannot change name of input parameter "c" -HINT: Use DROP FUNCTION first. +HINT: Use DROP FUNCTION dfunc(character varying,numeric) first. drop function dfunc(varchar, numeric); --fail, named parameters are not unique create function testfoo(a int, a int) returns int as $$ select 1;$$ language sql; diff --git a/src/test/regress/expected/rangefuncs.out b/src/test/regress/expected/rangefuncs.out index 5f20c9324975eda8e52c730f621a76edf708a4bf..9fbdd83f6749a97a8bbc2349e705ceb75b62f078 100644 --- a/src/test/regress/expected/rangefuncs.out +++ b/src/test/regress/expected/rangefuncs.out @@ -439,7 +439,7 @@ CREATE OR REPLACE FUNCTION foo(in f1 int, out f2 int, out f3 text) RETURNS record AS 'select $1+1' LANGUAGE sql; ERROR: cannot change return type of existing function -HINT: Use DROP FUNCTION first. +HINT: Use DROP FUNCTION foo(integer) first. CREATE OR REPLACE FUNCTION foor(in f1 int, out f2 int, out text) AS $$select $1-1, $1::text || 'z'$$ LANGUAGE sql; SELECT f1, foor(f1) FROM int4_tbl; @@ -521,7 +521,7 @@ SELECT * FROM dup('xyz'::text); CREATE OR REPLACE FUNCTION dup (inout f2 anyelement, out f3 anyarray) AS 'select $1, array[$1,$1]' LANGUAGE sql; ERROR: cannot change name of input parameter "f1" -HINT: Use DROP FUNCTION first. +HINT: Use DROP FUNCTION dup(anyelement) first. DROP FUNCTION dup(anyelement); -- equivalent behavior, though different name exposed for input arg CREATE OR REPLACE FUNCTION dup (inout f2 anyelement, out f3 anyarray)