2 votes

Comment créer un Datum pour la base de données NULL dans PostgreSQL une fonction C côté serveur ?

Je me demandais comment créer un point de référence pour la base de données. NULL dans PostgreSQL ?

Je sais qu'il y a PG_RETURN_NULL() pour en retournant sur une base de données NULL dans un LANGUAGE C fonction. Mais je veux juste créer un Datum pour NULL par exemple, pour être stocké dans un tableau (ou un enregistrement). Devrais-je simplement utiliser (Datum) 0 ?

(Ceci est avec PostgreSQL 12)

2voto

Laurenz Albe Points 40920

0 est une valeur valide pour de nombreux types de données, donc cela ne fonctionnerait pas.

Partout où vous avez un nullable Datum dans le code du serveur PostgreSQL, vous avez également une bool (généralement appelé isnull ) qui indique si le Datum est NULL ou non.

Comparez la définition suivante tirée de 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;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X