2

我正在使用 Postgresql 9.2 安装,并且正在尝试让扩展程序(我已经编程)运行。

这段代码可以编译,我可以将它加载到 Postgresql 中;但每次我尝试做一个INSERT,与数据库的连接都会停止。我想原因是我的in-function 以某种方式被破坏了。

首先是typedef:

typedef struct tphys {
   char   length[4];
   char   data[1];
} tphys;

如您所见,我有一个数据类型,它的大小是无限的。现在到in-code:

PG_FUNCTION_INFO_V1(tphys_data_in);
Datum
tphys_data_in(PG_FUNCTION_ARGS)
{
   char *in  = PG_GETARG_CSTRING(0);
   tphys *dest = (tphys *) palloc(VARHDRSZ + VARSIZE(in));

   SET VARSIZE(dest, VARHDRSZ + VARSIZE(in));
   memcpy(VARDATA(dest), in, VARSIZE(in));

   PG_RETURN_POINTER(dest);
}

我一直在尝试这段代码很长一段时间,我真的不知道错误在哪里。你可能看到了吗?

4

1 回答 1

3

您不能将 VARSIZE 宏用于 cstring 类型。

char *instr = PG_GETAR_CSTRING(0);
tphys *dest = (phhys *) palloc(VARHDRSZ + strlen(instr));

...
于 2013-02-25T18:35:10.320 回答