PostgreSQL 中的长数字和按位运算

Long numbers in PostgreSQL and bitwise operations

有一个使用 PostgreSQL 数据库的 django 应用程序。
我们的任务是收集和存储 MSSQL 服务器权限(它们的数量约为 120)。它实现为一个长数字,其中每一位是 1 个权限。
因此我们需要在 PostgreSQL 中存储一个很长的数字,但它的最大数值是 64 位。这就是我们现在将 is 存储为字符串的原因。 应用程序创建一个 SQL 查询,例如:

SELECT "mssql_ace"."id", .... "mssql_ace"."permissions",

FROM "mssql_ace"

LEFT OUTER JOIN ... ON ...
...
WHERE (.... AND ("mssql_ace"."permissions" & 1) = 1)

ORDER BY ... ;

现在的问题出在WHERE部分。我们需要按位操作,这是一种通过权限过滤数据的方法,适用于整个应用程序,除此之外。我们不能对字符串使用按位运算。

我们试过在 Postgre 中进行转换SQL:

1. (CAST("mssql_ace"."permissions" AS BIGINT) & 1)

2. "mssql_ace"."permissions"::BIGINT & 1

和其他事情:

3. DECIMAL also doesn't support bitwise

我们想把这个大数字分成两部分。但它需要大量的工作来改变应用程序内部。还有其他想法吗?我们不能改变的主要事情是按位运算的使用。

谢谢。

我不知道如何将它集成到 django 中,但逻辑上的 PostgreSQL 数据类型是 bit varying。它允许您有效地存储长位串。