2013-02-25 37 views
2

我正在使用Postgresql 9.2安裝,並試圖獲得擴展(我編程)運行。Postgresql:在C中定義自己的類型

該代碼編譯,我可以加載到Postgresql;但每次我嘗試執行INSERT時,都會停止與數據庫的連接。我想這是因爲我的in功能不知何故被破壞。

首先到的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); 
} 

我一直使用此代碼很長一段時間,我真的不知道哪裏出錯。你可能會看到它嗎?

回答

3

對於cstring類型,不能使用VARSIZE宏。

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

... 
+0

謝謝!這工作! – navige 2013-02-26 09:35:22

相關問題