Hello! I'd like to write C-function returning text for using in PG 8.3.3. (WinXP SP2) For compilation I use MinGW-5.1.4 (gcc 3.4.5),MSYS-1.0.10. The code looks like this (in reduced variant): #include "postgres.h" #include "fmgr.h" #include "executor/executor.h" #include "utils/timestamp.h" #include "utils/builtins.h" #include "utils/formatting.h" #ifdef PG_MODULE_MAGIC PG_MODULE_MAGIC; #endif #define PG_CSTR_GET_TEXT(cstrp) \ DatumGetTextP(DirectFunctionCall1(textin, CStringGetDatum(cstrp))) PG_FUNCTION_INFO_V1(SomeFunction); Datum SomeFunction(PG_FUNCTION_ARGS) { PG_RETURN_TEXT_P(PG_CSTR_GET_TEXT("my_string")); } Then I create stored procedure in PG: CREATE OR REPLACE FUNCTION "service"."some_function" () RETURNS text AS '$libdir/some_dll', 'SomeFunction' LANGUAGE C STRICT; ----------------------------------------------------- When I'm trying to use "service"."some_function" PG fails. I tried to use the example from documentation: PG_FUNCTION_INFO_V1(concat_text); Datum concat_text(PG_FUNCTION_ARGS) { text *arg1 = PG_GETARG_TEXT_P(0); text *arg2 = PG_GETARG_TEXT_P(1); int32 new_text_size = VARSIZE(arg1) + VARSIZE(arg2) - VARHDRSZ; text *new_text = (text *) palloc(new_text_size); SET_VARSIZE(new_text, new_text_size); memcpy(VARDATA(new_text), VARDATA(arg1), VARSIZE(arg1) - VARHDRSZ); memcpy(VARDATA(new_text) + (VARSIZE(arg1) - VARHDRSZ), VARDATA(arg2), VARSIZE(arg2) - VARHDRSZ); PG_RETURN_TEXT_P(new_text); } CREATE FUNCTION concat_text(text, text) RETURNS text AS '$libdir/some_dll', 'concat_text' LANGUAGE C STRICT; And I got the same result. When I'm trying to return integer, f.e., evetything is fine. Also all this examples worked fine with PostgreSQL 8.2. I saw some similar problems - but I didn't find the solution ( http://archives.postgresql.org/pgsql-general/2008-05/msg00060.php http://archives.postgresql.org/pgsql-general/2008-05/msg00097.php Have somebody any ideas how to resolve this problem? Thanks in advance, Marina