Ist es möglich, eine bitweise Gruppenfunktion auszuführen?

Ich habe ein Feld in einer Tabelle, die bitweise Flags enthält. Nehmen wir zum Beispiel an, es gibt drei Flags:4 => read, 2 => write, 1 => execute und der tisch sieht so aus*:

  user_id  |  file  |  permissions
-----------+--------+---------------
        1  |  a.txt |  6    ( <-- 6 = 4 + 2 = read + write)
        1  |  b.txt |  4    ( <-- 4 = 4 = read)
        2  |  a.txt |  4
        2  |  c.exe |  1    ( <-- 1 = execute)

Ich bin daran interessiert, alle Benutzer zu finden, die ein bestimmtes Flag in einem beliebigen Datensatz gesetzt haben (z. B. "Schreiben"). Um dies in einer Abfrage zu tun, stellte ich fest, dass Sie einen einzelnen Wert erhalten, der die "Gesamtsumme" ihrer Berechtigungen darstellt, wenn Sie alle Berechtigungen des Benutzers ODER-verknüpft haben:

  user_id  |  all_perms
-----------+-------------
        1  |  6        (<-- 6 | 4 = 6)
        2  |  5        (<-- 4 | 1 = 5)

*Meine eigentliche Tabelle hat nichts mit Dateien oder Dateiberechtigungen zu tun, sondern ist nur ein Beispiel

Gibt es eine Möglichkeit, dies in einer Aussage auszuführen? So wie ich es sehe, ist es einer normalen Aggregatfunktion mit GROUP BY sehr ähnlich:

SELECT user_id, SUM(permissions) as all_perms
FROM permissions
GROUP BY user_id

... aber offensichtlich eine magische "bitweise oder" -Funktion anstelle von SUM. Weiß jemand so etwas?

(Und für Bonuspunkte funktioniert es im Orakel?)

Antworten auf die Frage(5)

Ihre Antwort auf die Frage