PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 20/07/2023 09:05:55

JoaoB
Membre

Gestion de la nullabilite dans un select

Bonjour,

N’ayant pas trouvé la réponse, je la pose ici:

Lorsque je fais un select sur une pk (donc not null),
la structure sql retournée renvoie la colonne nullable.

note: c’est le comportement que j’ai sur une db
PostgreSql dont je ne suis pas admin

Comment faire en sorte que postgresql me renvoie la colonne
avec une bonne gestion de la nullabilite?

Pi: pour matérialiser la structure renvoyée par mon select
J’ai créé une table:

Create table mytable(
(Row_id integer not null);

Create table reponse as
select Row_id from mytable;

=> reponse.Row_id est nullable

Hors ligne

#2 20/07/2023 10:12:00

rjuju
Administrateur

Re : Gestion de la nullabilite dans un select

Bonjour,

Le jeu de données retourné ne contient pas d'information sur la nullabilité "globale" d'une colonne.  Je ne suis pas certain de ce que vous voulez faire, mais si vous voulez créer une seconde table avec les bonnes contraintes vous pouvez utiliser à la place


CREATE TABLE reponse (LIKE mytable);
INSERT INTO reponse SELECT * FROM mytable;

Hors ligne

#3 24/07/2023 18:51:39

JoaoB
Membre

Re : Gestion de la nullabilite dans un select

Bonjour,

Merci pour votre réponse.

De ce que je comprends ... si je fais un select sur une PK d'une table, j'ai une information de type structure mais l'information sur la nullabilité n'y est pas.

"CREATE TABLE table2 as SELECT Pk_id from table1" crée une table avec la structure du select (nom de colonne, format) mais la nullabilité n'est pas reprise.

La documentation n'est pas précise : https://www.postgresql.org/docs/8.1/sql … bleas.html
"The table columns have the names and data types associated with the output columns of the SELECT (except that you can override the column names by giving an explicit list of new column names)."

je m'attendais à ce que la nullabilité soit prise en compte aussi ... car, sauf erreur de ma part, Oracle ou DB2 notamment, le font.

Mon contexte est l'alimentation de tables sous postgresql depuis un ETL IBM Datastage.
Durant le runtime, j'ai des warnings indiquant que les données lues (select) sont null alors que déclarés not null dans le flux ... bien que le select porte sur des colonnes not null.

Je continue mes investigations et je reviens ici dès que j'ai plus d'informations.

Dernière modification par JoaoB (24/07/2023 18:55:41)

Hors ligne

#4 25/07/2023 01:55:28

rjuju
Administrateur

Re : Gestion de la nullabilite dans un select

Pour information, le lien que vous postez est pour la version 8.1, j'espère que vous utiliser une version toujours supportée.


La documentation est précise, et spécifie ce qui est conservé et non l'inverse.  De la même manière toutes les autres contraintes, indexes, trigger etc ne sont pas récupérés.


car, sauf erreur de ma part, Oracle ou DB2 notamment, le font.

Que se passe-t-il lorsqu'un attribut déclaré NOT NULL est rendu possiblement NULL, type LEFT JOIN etc?


Durant le runtime, j'ai des warnings indiquant que les données lues (select) sont null alors que déclarés not null dans le flux ... bien que le select porte sur des colonnes not null.

Le warning n'est pas très clair.  S'agit-il d'un NULL dans les données, ou d'une colonne dans une table déclarée NULL alors que l'ETL indique NOT NULL?

Hors ligne

Pied de page des forums