sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL Bitwise-operators met bitvariatie kunnen EN-bitreeksen van verschillende groottes niet

Het gedrag van de PostgreSQL bit en bit varying typen is buitengewoon nutteloos, met de manier waarop het weigert bitvelden uit te breiden voor bewerkingen, en het naar rechts uitbreidt voor casts in plaats van ze naar links uit te breiden.

Het zou logisch zijn als Pg de kleinere operand naar links zou uitbreiden met nullen vóór een EN- of OF-bewerking, in plaats van te falen.

Je kunt geen cast gebruiken voor bit(n) om dezelfde lengtes te krijgen, omdat om de een of andere gekke reden een cast naar bit(n) rechter-pads het argument, waardoor het in bijna alle situaties nutteloos is.

Je kunt zoiets gebruiken als lpad($1::text, greatest(length($1), length($2)),'0')::bit varying om een ​​bitveld met nullen naar links uit te breiden tot de grootste van twee lengtes. Het is omslachtig, maar het gaat lukken. Ik raad aan om wrapper-functies te schrijven om de rommel op te ruimen.

U kunt ook overwegen de bit . aan te passen ondersteuningscode in src/backend/utils/adt/varbit.c om functies toe te voegen aan links-uitbreidende en links-afgekapte bitvelden, en functies om links-uitbreidende vergelijkingen te maken. Het zou vrij eenvoudig moeten zijn op basis van de bestaande code.



  1. Gegevensstructuur voor verschillende soorten toernooien/competities (competitie, ladder, enkele/dubbele eliminatie enz.)

  2. importfout met python-mysql-connector 1.16, django 1.6 en python 3.2.3

  3. UPDATE indien bestaat anders INSERT in SQL Server 2008

  4. Django-migraties - is het mogelijk om Zuid in het midden van het project te gebruiken?