PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Побитовите оператори на PostgreSQL с битова промяна не могат да И битови низове с различни размери

Поведението на PostgreSQL bit и bit varying типове е изключително безполезно, с начина, по който отказва да разшири битови полета за операции и ги разширява надясно за прехвърляния, вместо да ги разширява наляво.

Би било логично Pg да разшири наляво по-малкия операнд с нули преди операция И или ИЛИ, вместо да се провали.

Не можете да използвате прехвърляне към bit(n) за да получите същите дължини, защото по някаква безумна причина прехвърляне към bit(n) десни подложки аргумента, което го прави безполезен в почти всички ситуации.

Можете да използвате нещо като lpad($1::text, greatest(length($1), length($2)),'0')::bit varying за разширяване на ляво битово поле с нули до по-голямата от две дължини. Тромаво е, но ще свърши работа. Бих препоръчал да се напишат функции за обвивка, които да съдържат бъркотията.

Алтернативно, помислете за модифициране на bit код за поддръжка в src/backend/utils/adt/varbit.c за добавяне на функции към ляво разширение и ляво съкращаване на битови полета и функции за извършване на ляво разширение на сравнения. Би трябвало да е доста лесно въз основа на съществуващия код.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да променя стойността на единично свойство в типа данни PostgreSQL JSONB?

  2. Премахване на елемент от масив в обект JSONB

  3. Mountain Lion Postgres не можа да се свърже

  4. Как мога да слушам създаването на конкретен модел и да създам нов (на различна таблица) въз основа на това?

  5. Масивни вложки с pg-обещание