さまざまなビットマスクフィールドがあり、ビット単位のANDを実行したいと思います。
PG::Error: ERROR: cannot AND bit strings of different sizes
SELECT "groups".* FROM "groups" WHERE (read_roles_bitmask = B'0' OR read_roles_bitmask & B'10' > B'0')
(このエラーを取得するには、テーブルにさまざまな長さのビットマスクが必要です。)
ビット単位の計算は次のようになると思います:000010&100000010 = 00010
また、ビットマスクを整数にキャストしようとしましたが、運がありませんでした。
なぜPostgreSQLはこれを窒息させるのですか?
うまく再生するには、このクエリをどのように書き直す必要がありますか?
次を使用してビット演算子を機能させることができました:lpad(read_roles_bitmask :: varchar、64、 '0'):: bigint
ただし、これは64ビットに制限されていますが、より良い方法はありますか?