diff --git a/src/common/backend/utils/adt/varchar.cpp b/src/common/backend/utils/adt/varchar.cpp index 6cb9f0dae..aabc2bf11 100755 --- a/src/common/backend/utils/adt/varchar.cpp +++ b/src/common/backend/utils/adt/varchar.cpp @@ -572,12 +572,6 @@ Datum varchar(PG_FUNCTION_ARGS) /* only reach here if string is too long... */ - if (len > MaxAttrSize) { - ereport(ERROR, - (errcode(ERRCODE_STRING_DATA_RIGHT_TRUNCATION), - errmsg("value too long for type character varying maxlen(%d) input_len(%d)", MaxAttrSize, len))); - } - /* truncate multibyte string preserving multibyte boundary */ max_mb_len = pg_mbcharcliplen(s_data, len, max_len); diff --git a/src/test/regress/expected/varchar.out b/src/test/regress/expected/varchar.out index 2759e06a2..defd64c67 100644 --- a/src/test/regress/expected/varchar.out +++ b/src/test/regress/expected/varchar.out @@ -115,7 +115,20 @@ select char_length(to_char(lpad('abc', 1024 * 1024 *10, 'x'))); (1 row) select char_length(to_char(lpad('abc', 1024 * 1024 *10 + 1, 'x'))); -ERROR: value too long for type character varying maxlen(10485760) input_len(10485761) -CONTEXT: referenced column: varchar -SQL function "to_char" statement 1 -referenced column: char_length \ No newline at end of file + char_length +------------- + 10485760 +(1 row) + +SELECT char_length(lpad('abcCC',1024*1024*11,'x')::varchar2(10485760)); + char_length +------------- + 10485760 +(1 row) + +SELECT char_length(lpad('abcCC',1024*1024*11,'x')::varchar(10485760)); + char_length +------------- + 10485760 +(1 row) + diff --git a/src/test/regress/sql/varchar.sql b/src/test/regress/sql/varchar.sql index 7cfbb6bde..d5086e5df 100644 --- a/src/test/regress/sql/varchar.sql +++ b/src/test/regress/sql/varchar.sql @@ -68,3 +68,7 @@ SELECT '' AS four, * FROM VARCHAR_TBL ORDER BY f1; select char_length(to_char(lpad('abc', 1024 * 1024 *10, 'x'))); select char_length(to_char(lpad('abc', 1024 * 1024 *10 + 1, 'x'))); + +SELECT char_length(lpad('abcCC',1024*1024*11,'x')::varchar2(10485760)); + +SELECT char_length(lpad('abcCC',1024*1024*11,'x')::varchar(10485760));