2017-04-05 25 views
0

私はC SPIを使用してPostgresql関数を拡張しています。この関数は、Postgres N-Dim配列を取り込んでそこからデータを取得できる必要があります。私は1次元配列からデータを取得することができますが、N次元配列にアクセスしようとするとsegfaultを取得します。それは1次元配列に行列をフラット化が、出てきた値は、単にゴミであるかのように、単に要素にアクセスするための多次元配列を入力としてPostgresql C関数を構築する

私の最初の試みは、単に

PG_FUNCTION_INFO_V1(sum_elements); 
Datum 
matmul(PG_FUNCTION_ARGS) 
{ 

    ArrayType *anyArray = PG_GETARG_ARRAYTYPE_P(0); 
    int32 **a = (int32 **) ARR_DATA_PTR(anyArray); 



    PG_RETURN_INT64(a[1][1]); 
} 

だった私も試してみました。

ありがとうございました!

答えて

0

deconstruct_array(..)関数を使用して値を抽出できます。この関数はDatum型のポインタを与えます。書籍の

例:

deconstruct_array(input_array, //one-dimensional array 
        INT4OID, //of integers 
        4,//size of integer in bytes 
        true,//int4 is pass-by value 
        'i',//alignment type is 'i' 
        &datums, &nulls, &count); // result here  

「がデータムポインタが実際の要素で満たされたアレイを指すように設定されます。」

あなたは使用して値にアクセスできます。

DatumGetInt32(datums[i]); 
関連する問題