Il comportamento del bit
di PostgreSQL e bit varying
tipi è estremamente inutile, con il modo in cui rifiuta di estendere i campi di bit per le operazioni e li estende a destra per i cast invece di estenderli a sinistra.
Avrebbe senso che Pg estendesse a sinistra l'operando più piccolo con zeri prima di un'operazione AND o OR, anziché fallire.
Non puoi usare un cast per bit(n)
per ottenere le stesse lunghezze, perché per qualche folle ragione un cast a bit(n)
pad destro l'argomento, rendendolo inutile in quasi tutte le situazioni.
Puoi usare qualcosa come lpad($1::text, greatest(length($1), length($2)),'0')::bit varying
per estendere a sinistra un campo di bit con zero al maggiore di due lunghezze. È ingombrante, ma funzionerà. Consiglierei di scrivere funzioni wrapper per contenere il disordine.
In alternativa, valuta la possibilità di modificare il bit
codice di supporto in src/backend/utils/adt/varbit.c
per aggiungere funzioni ai campi di bit con estensione a sinistra e tronca a sinistra e funzioni per eseguire confronti con estensione a sinistra. Dovrebbe essere abbastanza semplice in base al codice esistente.