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é.