2013-02-25 2 views
2

저는 PostgreSQL 9.2를 사용하고 있으며 확장 프로그램을 실행하려고합니다.Postgresql : C에서 자체 유형 정의

이 코드는 컴파일되고 Postgresql로로드 할 수 있습니다. 그러나 내가 INSERT을 시도 할 때마다 DB에 대한 연결이 중지됩니다. 그 이유는 내 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