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@xxxxxxxxxx>: > > > 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