Как создать датум для базы данных NULL в PostgreSQL серверной функции C? - PullRequest
2 голосов
/ 17 апреля 2020

Мне было просто интересно, как создать Datum для базы данных NULL значение в PostgreSQL?

Я знаю, что PG_RETURN_NULL() для возвращает базу данных NULL в LANGUAGE C функция. Но я просто хочу создать Datum для NULL, например, для хранения в массиве (или записи). Должен ли я просто использовать (Datum) 0?

(это с PostgreSQL 12)

1 Ответ

2 голосов
/ 17 апреля 2020

0 является допустимым значением для многих типов данных, поэтому оно не будет работать.

Где бы вы ни вводили обнуляемый Datum в PostgreSQL код сервера, у вас также есть флаг bool ( обычно называемый isnull), который указывает, является ли Datum НЕДЕЙСТВИТЕЛЬНЫМ или нет.

Сравните следующее определение с src/include/postgres.h:

/*
 * A NullableDatum is used in places where both a Datum and its nullness needs
 * to be stored. This can be more efficient than storing datums and nullness
 * in separate arrays, due to better spatial locality, even if more space may
 * be wasted due to padding.
 */
typedef struct NullableDatum
{
#define FIELDNO_NULLABLE_DATUM_DATUM 0
    Datum       value;
#define FIELDNO_NULLABLE_DATUM_ISNULL 1
    bool        isnull;
    /* due to alignment padding this could be used for flags for free */
} NullableDatum;
...