2

私は Postgresql 9.2 インストールを使用しており、拡張機能 (プログラム済み) を実行しようとしています。

このコードはコンパイルされ、Postgresql にロードできます。しかし、実行しようとするたびINSERTに、DB への接続が停止します。その理由は、私のin関数が何らかの形で壊れているためだと思います。

まずtypedefに:

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

ご覧のとおり、サイズが無制限であることを意図したデータ型があります。そして今、inコードに:

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

cstringタイプにVARSIZEマクロを使用することはできません。

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

...
于 2013-02-25T18:35:10.320 に答える