PostgreSQLのbit
の動作 およびbit varying
タイプは、操作のためにビットフィールドを拡張することを拒否する方法で非常に役に立たず、キャストのためにビットフィールドを左に拡張するのではなく、右に拡張します。
Pgが失敗するのではなく、ANDまたはOR演算の前に、小さい方のオペランドをゼロで左に拡張することは理にかなっています。
bit(n)
へのキャストは使用できません 同じ長さを取得するには、なんらかの理由でbit(n)
にキャストするためです。 右パッド 議論は、ほとんどすべての状況で役に立たないものにします。
lpad($1::text, greatest(length($1), length($2)),'0')::bit varying
のようなものを使用できます 左に-ゼロのあるビットフィールドを2つの長さの大きい方に拡張します。面倒ですが、うまくいきます。混乱を含むラッパー関数を作成することをお勧めします。
または、bit
を変更することを検討してください src/backend/utils/adt/varbit.c
のサポートコード 左拡張ビットフィールドと左切り捨てビットフィールドに関数を追加し、左拡張比較を実行する関数を追加します。既存のコードに基づいて、かなり簡単なはずです。