diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 5a6540b88ea154a78fcdf3b56f24bc73e25c70eb..444ee7a2007d9a6cdbf714470bbf71651647d758 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.289 2008/12/18 18:20:34 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.290 2008/12/19 05:04:35 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -4451,6 +4451,14 @@ get_rule_expr(Node *node, deparse_context *context, appendStringInfo(buf, "ARRAY["); get_rule_expr((Node *) arrayexpr->elements, context, true); appendStringInfoChar(buf, ']'); + /* + * If the array isn't empty, we assume its elements are + * coerced to the desired type. If it's empty, though, we + * need an explicit coercion to the array type. + */ + if (arrayexpr->elements == NIL) + appendStringInfo(buf, "::%s", + format_type_with_typemod(arrayexpr->array_typeid, -1)); } break; diff --git a/src/test/regress/expected/polymorphism.out b/src/test/regress/expected/polymorphism.out index 6fafc0343cc2cb32a1f916b1d511bf4cae10d773..aace99cb62554bee87ccecc95c414974c0c32749 100644 --- a/src/test/regress/expected/polymorphism.out +++ b/src/test/regress/expected/polymorphism.out @@ -1005,10 +1005,10 @@ $$ select array_upper($1, 1) $$ language sql; ERROR: cannot remove parameter defaults from existing function HINT: Use DROP FUNCTION first. \df dfunc - List of functions - Schema | Name | Result data type | Argument data types ---------+-------+------------------+-------------------------------------- - public | dfunc | integer | VARIADIC a integer[] DEFAULT ARRAY[] + List of functions + Schema | Name | Result data type | Argument data types +--------+-------+------------------+------------------------------------------------- + public | dfunc | integer | VARIADIC a integer[] DEFAULT ARRAY[]::integer[] (1 row) drop function dfunc(a variadic int[]);