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

Bitweise PostgreSQL-Operatoren mit unterschiedlichen Bits können Bit-Strings unterschiedlicher Größe nicht UND-verknüpfen

Das Verhalten des PostgreSQL bit und bit varying types ist äußerst wenig hilfreich, da es sich weigert, Bitfelder für Operationen zu erweitern, und sie für Umwandlungen nach rechts erweitert, anstatt sie nach links zu erweitern.

Es wäre für Pg sinnvoll, den kleineren Operanden vor einer UND- oder ODER-Operation mit Nullen zu erweitern, anstatt zu versagen.

Sie können keine Umwandlung in bit(n) verwenden um die gleichen Längen zu erhalten, weil aus irgendeinem verrückten Grund eine Umwandlung in bit(n) rechte Pads das Argument, was es in fast allen Situationen nutzlos macht.

Sie können so etwas wie lpad($1::text, greatest(length($1), length($2)),'0')::bit varying verwenden um ein Bitfeld mit Nullen auf die größere von zwei Längen nach links zu erweitern. Es ist umständlich, aber es wird funktionieren. Ich würde empfehlen, Wrapper-Funktionen zu schreiben, um das Durcheinander einzudämmen.

Alternativ können Sie auch das bit ändern Unterstützungscode in src/backend/utils/adt/varbit.c zum Hinzufügen von Funktionen zu linkserweiternden und linksabschneidenden Bitfeldern und von Funktionen zum Durchführen von linkserweiternden Vergleichen. Basierend auf dem vorhandenen Code sollte es ziemlich einfach sein.