PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Warum betrachtet PostgreSQL NULL-Grenzen in Bereichstypen als von unendlichen Grenzen verschieden?

Aber sie nicht. NULL ist eine Syntaxhilfe bei Verwendung als Begrenzung eines Bereichs, während -infinity / infinity sind tatsächliche Werte im Bereich der Reichweite. Abstrakte Werte bedeuten kleiner/größer als jeder andere Wert, aber Werte nichtsdestotrotz (die eingeschlossen oder ausgeschlossen werden können).

Auch NULL funktioniert für alle Bereichstyp, während die meisten Datentypen keine speziellen Werte wie -infinity haben / infinity . Nimm integer und int4range zum Beispiel.

Betrachten Sie zum besseren Verständnis den Thread in pgsql-general, der a_horse bereitgestellt :

Alle Datentyp kann NULL sein , sogar Domänen, die ausdrücklich NOT NULL sind . Siehe:

Dazu gehört date , natürlich (wie Adrian kommentierte ):

test=> SELECT NULL::date, pg_typeof(NULL::date);
 date | pg_typeof 
------+-----------
      | date
(1 row)

Aber versuchen, NULL zu diskutieren als Wert (wenn es als Bereichsgrenze verwendet wird) ist zunächst ein irreführender Ansatz. Es ist kein Wert.

Wieder NULL wird nicht als Wert in der Domäne des Bereichs behandelt. Es dient nur als bequeme Syntax, um zu sagen:"unbegrenzt". Nicht mehr als das.