Opførselen af PostgreSQL bit
og bit varying
typer er yderst uhensigtsmæssigt, med den måde, den nægter at udvide bitfelter til operationer, og den udvider dem til højre for casts i stedet for at udvide dem til venstre.
Det ville give mening for Pg at venstre-forlænge den mindre operand med nuller før en OG- eller ELLER-operation, i stedet for at mislykkes.
Du kan ikke bruge en cast til bit(n)
for at få samme længder, for af en eller anden sindssyg grund en cast til bit(n)
højre puder argumentet, hvilket gør det ubrugeligt i næsten alle situationer.
Du kan bruge noget som lpad($1::text, greatest(length($1), length($2)),'0')::bit varying
at venstre-udvide et bitfelt med nuller til den største af to længder. Det er besværligt, men det vil virke. Jeg vil anbefale at skrive indpakningsfunktioner for at indeholde rod.
Alternativt kan du overveje at ændre bit
supportkode i src/backend/utils/adt/varbit.c
at tilføje funktioner til venstre-udvidende og venstre-trunkeret bitfelter, og funktioner til at udføre venstre-udvidende sammenligninger. Det burde være ret nemt baseret på den eksisterende kode.