Yuriy Rusinov <yrusinov@xxxxxxxxx> writes: > In C-function I do > size_t nr_ins = strlen ("insert into rand_state (state_rand) values ($1);"); > char * r_sql = (char *) palloc (nr_ins + 1); > strncpy (r_sql, "insert into rand_state (state_rand) values ($1);", nr_ins); This is a hard, error-prone, and ultimately incorrect way to do pstrdup() --- you're not ensuring that the new string is null-terminated. > Datum * val = PointerGetDatum (randBuf); Didn't your compiler give you a warning about that? PointerGetDatum produces a Datum, not a pointer to a Datum. You'd need something more like Datum val[1]; val[0] = PointerGetDatum (randBuf); This is assuming that randBuf is even of the right format to be a bytea value, which is unclear from your extract. > const char * nulls = "NULL"; And that's just wrong. Personally I'd just pass NULL to SPI_execute_with_args since you don't have any null values to pass, but if you don't want to do that you'd need something more like char nulls[1]; nulls[0] = ' '; (hmm, it looks like the SPI documentation leaves something to be desired here --- the SPI_execute_with_args page, at least, isn't explaining the convention for elements of the nulls[] array) > Could you give some work examples for SPI_execute_with_args because I > didn't find them in documentation. A quick grep says there's a usage in src/pl/plpgsql/src/pl_exec.c regards, tom lane -- Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-general