Создать целочисленный массив в функции PostgreSQL C - PullRequest
0 голосов
/ 05 мая 2020

Мой вопрос похож на эту ссылку . У меня есть таблица с миллионами строк, которую я должен поместить в один массив, отсортировать ее и получить минимальное и максимальное значение и вернуть результат в виде текста.

например. Имя таблицы: Образец, Имя столбца: id

Идентификатор столбца содержит миллионы записей, а тип данных может быть целым числом, float et c.,

Я должен ВОЗВРАТИТЬ результат как min -max (максимальное значение разделителя минимального значения, например 1-> 5)

Любая помощь приветствуется. Заранее спасибо.

#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif

/* Add a prototype marked PGDLLEXPORT */
PGDLLEXPORT Datum make_array(PG_FUNCTION_ARGS);

PG_FUNCTION_INFO_V1(make_array);

Datum
make_array(PG_FUNCTION_ARGS)
{
ArrayType* result;
ArrayType* result1;
Oid         element_type = get_fn_expr_argtype(fcinfo->flinfo, 0);
Datum       element;
bool        isnull;
int16       typlen;
bool        typbyval;
char        typalign;
int         ndims;
int         dims[MAXDIM];
int         lbs[MAXDIM];

if (!OidIsValid(element_type))
    elog(ERROR, "could not determine data type of input");

/* get the provided element, being careful in case it's NULL */
isnull = PG_ARGISNULL(0);
if (isnull)
    element = (Datum)0;
else
    element = PG_GETARG_DATUM(0);

/* we have one dimension */
ndims = 1;
/* and one element */
dims[0] = 1;
/* and lower bound is 1 */
lbs[0] = 1;

/* get required info about the element type */
get_typlenbyvalalign(element_type, &typlen, &typbyval, &typalign);

/* now build the array */
result = construct_md_array(&element, &isnull, ndims, dims, lbs,
    element_type, typlen, typbyval, typalign);

PG_RETURN_ARRAYTYPE_P(result);

}

Результат после компиляции этого кода будет следующим:

введите описание изображения здесь

Я новичок ie в создании Postgres C расширений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...