Zachowanie bit
PostgreSQLa i bit varying
typy są niezmiernie nieprzydatne, ponieważ odmawiają rozszerzania pól bitowych dla operacji i rozszerzają je w prawo dla rzutowania zamiast w lewo.
Dla Pg sensowne byłoby wydłużenie w lewo mniejszego operandu o zera przed operacją AND lub OR, zamiast niepowodzenia.
Nie możesz użyć rzutowania na bit(n)
aby uzyskać te same długości, ponieważ z jakiegoś szalonego powodu rzutowanie na bit(n)
prawy klawisze argument, czyniąc go bezużytecznym w prawie wszystkich sytuacjach.
Możesz użyć czegoś takiego jak lpad($1::text, greatest(length($1), length($2)),'0')::bit varying
aby przedłużyć z lewej strony pole bitowe zerami do większej z dwóch długości. To kłopotliwe, ale zadziała. Zalecam napisanie funkcji opakowujących, aby powstrzymać bałagan.
Alternatywnie rozważ zmodyfikowanie bit
kod wsparcia w src/backend/utils/adt/varbit.c
do dodawania funkcji do pól bitowych rozszerzanych w lewo i przycinanych w lewo oraz funkcji do wykonywania porównań rozszerzających w lewo. Powinno to być całkiem proste w oparciu o istniejący kod.