Chování bit PostgreSQL a bit varying typů je mimořádně neužitečné, protože odmítá rozšiřovat bitová pole pro operace a pro přetypování je prodlužuje doprava místo toho, aby je rozšiřovala doleva.
Pro Pg by dávalo smysl, aby před operací AND nebo OR rozšířil menší operand doleva o nuly, než aby selhal.
Přetypování nelze použít na bit(n) získat stejné délky, protože z nějakého šíleného důvodu přetypování na bit(n) pravé podložky argument, takže je k ničemu téměř ve všech situacích.
Můžete použít něco jako lpad($1::text, greatest(length($1), length($2)),'0')::bit varying k levému rozšíření bitového pole s nulami na větší ze dvou délek. Je to těžkopádné, ale půjde to. Doporučil bych napsat funkce wrapper, které budou obsahovat nepořádek.
Případně zvažte úpravu bit kód podpory v src/backend/utils/adt/varbit.c pro přidání funkcí do levého rozšiřujícího a levého zkráceného bitového pole a funkcí pro provádění porovnávání s levým rozšířením. Na základě stávajícího kódu by to mělo být docela snadné.