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;