@ -1656,8 +1656,8 @@ AS $$ SELECT CAST(float8out($1) AS VARCHAR2) $$
|
|||||||
LANGUAGE SQL STRICT IMMUTABLE NOT FENCED;
|
LANGUAGE SQL STRICT IMMUTABLE NOT FENCED;
|
||||||
|
|
||||||
CREATE OR REPLACE FUNCTION to_char(TEXT)
|
CREATE OR REPLACE FUNCTION to_char(TEXT)
|
||||||
RETURNS TEXT
|
RETURNS varchar
|
||||||
AS $$ SELECT $1 $$
|
AS $$ SELECT $1::varchar(10485760) $$
|
||||||
LANGUAGE SQL STRICT IMMUTABLE NOT FENCED;
|
LANGUAGE SQL STRICT IMMUTABLE NOT FENCED;
|
||||||
|
|
||||||
CREATE OR REPLACE FUNCTION to_number(TEXT)
|
CREATE OR REPLACE FUNCTION to_number(TEXT)
|
||||||
|
@ -572,6 +572,12 @@ Datum varchar(PG_FUNCTION_ARGS)
|
|||||||
|
|
||||||
/* only reach here if string is too long... */
|
/* 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 */
|
/* truncate multibyte string preserving multibyte boundary */
|
||||||
max_mb_len = pg_mbcharcliplen(s_data, len, max_len);
|
max_mb_len = pg_mbcharcliplen(s_data, len, max_len);
|
||||||
|
|
||||||
|
@ -108,3 +108,14 @@ SELECT '' AS four, * FROM VARCHAR_TBL ORDER BY f1;
|
|||||||
| abcd
|
| abcd
|
||||||
(4 rows)
|
(4 rows)
|
||||||
|
|
||||||
|
select char_length(to_char(lpad('abc', 1024 * 1024 *10, 'x')));
|
||||||
|
char_length
|
||||||
|
-------------
|
||||||
|
10485760
|
||||||
|
(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
|
@ -64,3 +64,7 @@ INSERT INTO VARCHAR_TBL (f1) VALUES ('abcde');
|
|||||||
INSERT INTO VARCHAR_TBL (f1) VALUES ('abcd ');
|
INSERT INTO VARCHAR_TBL (f1) VALUES ('abcd ');
|
||||||
|
|
||||||
SELECT '' AS four, * FROM VARCHAR_TBL ORDER BY f1;
|
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')));
|
||||||
|
Reference in New Issue
Block a user