sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL Bitvisa operatorer med bitvarierande kan inte AND bitsträngar av olika storlekar

Beteendet för PostgreSQL bit och bit varying typer är ytterst ohjälpsam, med det sätt som den vägrar att utöka bitfält för operationer, och den högerförlänger dem för cast istället för att vänsterförlänga dem.

Det skulle vara vettigt för Pg att vänsterförlänga den mindre operanden med nollor före en OCH- eller ELLER-operation, snarare än att misslyckas.

Du kan inte använda en cast till bit(n) för att få samma längder, för av någon galen anledning en cast till bit(n) höger kuddar argumentet, vilket gör det värdelöst i nästan alla situationer.

Du kan använda något som lpad($1::text, greatest(length($1), length($2)),'0')::bit varying att vänsterförlänga ett bitfält med nollor till den största av två längder. Det är krångligt, men det kommer att fungera. Jag rekommenderar att du skriver omslagsfunktioner för att innehålla röran.

Alternativt kan du överväga att ändra bit stödkod i src/backend/utils/adt/varbit.c att lägga till funktioner till vänsterförlängda och vänsteravkortade bitfält, och funktioner för att göra jämförelser med vänsterförlängning. Det borde vara ganska enkelt baserat på den befintliga koden.



  1. Löpande summa för varje bidrag i grupp efter

  2. Så här sparar du signatur i MySQL

  3. pgbackups på Heroku hittades inte

  4. Finns det någon bra universell PHP MySQL HTTP-tunnel?