Re: Code for user-defined type
От | Paul Jones |
---|---|
Тема | Re: Code for user-defined type |
Дата | |
Msg-id | 1401379480.24596.YahooMailNeo@web161704.mail.bf1.yahoo.com обсуждение исходный текст |
Ответ на | Postgresql 9.2.4 - timezone error (Bhushan Pathak <bhushan.pathak02@gmail.com>) |
Ответы |
Re: Code for user-defined type
Re: Code for user-defined type |
Список | pgsql-general |
On Wed, May 28, 2014 at 10:51:43AM +0200, Pavel Stehule wrote: > > Hello > > > 2014-05-27 20:30 GMT+02:00 Paul Jones <pbj@cmicdo.com>: > > > I have written a user-defined type that allows direct import and printing > > of > > DB2 timestamps.It does correctly import and export DB2 timestamps, > > butI'm wondering ifsomeone could tell me if I made anymistakes in > > the C code, particularly w.r.t. memory leaks or non-portableconstructs. > > > > > > I'm doing this on 9.3.4. > > > > Thanks, > > There is one issue DirectFunctionCall takes a parameters converted to Datum > and returns Datum > > You should to use a macros XGetDatum and DatumGetX > > In this case > > newDate = DatumGetTimestamp(DirectFunctionCall2(to_timestamp, > CStringGetDatum(date_txt), > CStringGetDatum(cstring_to_text(nls_date_format)))); > > PG_RETURN_TIMESTAMP(newDate); > > > > There is inconsistency in types - Timestamp and Timestamptz - Thanks, Pavel! I used the proper XGetDatum and DatumGetX and was able to get it to work properly. However, I since discovered that I probably should not use "cstring_to_text" because of the palloc's it does. The problem comes when doing "\copy table from file". After about 1000 rows, the backend dies with SEGV, I think because of too many pallocs being created in the copy transaction. I rewrote it so that the format string is turned into a text at .so load time, and then converted the input string into a local text. PJ
В списке pgsql-general по дате отправления: