![]() | |
![]() |
| | Thread Tools | Display Modes |
#1
| |||
| |||
|
|
template1=# select version(); PostgreSQL 8.0.3 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.2 (mingw-special) template1=# create database test1 encoding 'unicode'; test1=# \encoding UNICODE test1=# \encoding gb18030 test1=# \encoding GB18030 test1=# select; .... 比致命错误还过分的错误: ERRORDATA_STACK_SIZE exceeded |
#2
| |||
| |||
|
|
My theory is "select;" incurs a parse error and this error message is supposed to be translated into your encoding, but unfortunately not every UTF8 character is necessarily be encoded as GB18030, which will cause an infinite recursive elogs just like this: 1:elog(parse_error) // contain unencodable characters 2: elog(report_not_translatable) // contain unencodable characters again 3: elog(report_report_not_translatable) 4: elog(report_report_report_not_translatable) 5: ... and corrupt the elog stack. To fix this, we could just print a "Unsupport encoding" message which is just a plain ascii character string and stop the recursion at step 3. Regards, Qingqing "杨邕" <yayooo (AT) gmail (DOT) com> writes template1=# select version(); PostgreSQL 8.0.3 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.2 (mingw-special) template1=# create database test1 encoding 'unicode'; test1=# \encoding UNICODE test1=# \encoding gb18030 test1=# \encoding GB18030 test1=# select; ... 比致命错误还过分的错误: ERRORDATA_STACK_SIZE exceeded ---------------------------(end of broadcast)--------------------------- TIP 6: explain analyze is your friend |
#3
| |||
| |||
|
|
Has this been fixed already? |
![]() |
| Thread Tools | |
| Display Modes | |
| |