PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL Gli operatori bit a bit con bit variabili non possono eseguire E le stringhe di bit di dimensioni diverse

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.