2017-04-05 7 views
0

Ich erweitere die Postgresql-Funktionen mit dem C SPI. Die Funktion muss in der Lage sein, ein Postgres N-Dim Array aufzunehmen und die Daten daraus zu erhalten. Ich bin in der Lage, die Daten von einem 1D-Array zu bekommen, aber ich bekomme einen segfault, wenn ich versuche, auf ein N-Dim-Array zuzugreifen.Aufbau der Postgresql C-Funktion mit multidimensionalem Array als Eingabe

Mein erster Versuch nur ein Element zugreifen war einfach

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]); 
} 

ich auch versucht, wenn es um die Matrix in einen 1D-Array abgeflacht, aber die Werte, die kamen, waren aus nur Müll.

Danke für die Hilfe!

Antwort

0

Sie können versuchen, die Funktion deconstruct_array (..) zu verwenden, um die Werte zu extrahieren. Diese Funktion gibt Ihnen einen Zeiger vom Typ Datum.

Beispiel des Buches:

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  

„Nullpunkte Zeiger wird gesetzt, um ein Array mit Elementen gefüllt tatsächlichen zu zeigen.“

Sie können die Werte zugreifen verwenden:

DatumGetInt32(datums[i]); 
Verwandte Themen