Re: ODBC query problem
От | Tom Lane |
---|---|
Тема | Re: ODBC query problem |
Дата | |
Msg-id | 25217.1058391139@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | Re: ODBC query problem (Luis Magaña <joe666@gnovus.com>) |
Ответы |
Re: ODBC query problem
|
Список | pgsql-general |
Luis =?ISO-8859-1?Q?Maga=F1a?= <joe666@gnovus.com> writes: > I've moved the database to a third location in the same disk using > pg_dumpall, the new location works with no errors, the initdb was made > without localization. > The production db was inited with es_MX locale, may that has something > to do with the problem ?. Yeah, according to recent reports from Maksim Likharev, there are some bugs in Solaris' locale libraries. It appears that strxfrm() will sometimes write more bytes than it is supposed to, thereby clobbering nearby data structures. The critical code is in src/backend/utils/adt/selfuncs.c, around line 2360 in 7.3.3: /* Guess that transformed string is not much bigger than original */ xfrmsize = strlen(val) + 32; /* arbitrary pad value here... */ xfrmstr = (char *) palloc(xfrmsize); xfrmlen = strxfrm(xfrmstr, val, xfrmsize); if (xfrmlen >= xfrmsize) { /* Oops, didn't make it */ pfree(xfrmstr); xfrmstr = (char *) palloc(xfrmlen + 1); xfrmlen = strxfrm(xfrmstr, val, xfrmlen + 1); } We've been debating what to do to work around this bug. I'd suggest changing xfrmstr = (char *) palloc(xfrmsize); to xfrmstr = (char *) palloc(xfrmsize + 32); so that there is more free space available than we tell strxfrm about. Perhaps also change xfrmstr = (char *) palloc(xfrmlen + 1); to xfrmstr = (char *) palloc(xfrmlen + 1 + 32); (although in theory that one should not be needed...) If that doesn't improve matters, try 100 extra bytes instead of 32. Please let us know how it goes. regards, tom lane
В списке pgsql-general по дате отправления: