使用PostgreSQL DB的django应用程序 我们的任务是收集和存储MSSQL Server权限(其数量约为120)。它实现为一个长数字,每个位是1个权限 因此,我们需要在PostgreSQL中存储一个很长的数字,但它的MAX数值是64位。这就是我们存储的原因现在是一个字符串。 应用程序创建一个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部分。我们需要按位操作,它是一种通过在整个应用程序中工作的权限来过滤数据的方法,除此之外。我们不能对字符串使用按位运算。
我们尝试在PostgreSQL中进行投射:
1. (CAST("mssql_ace"."permissions" AS BIGINT) & 1)
2. "mssql_ace"."permissions"::BIGINT & 1
等等:
3. DECIMAL also doesn't support bitwise
我们有一个想法,将这个大数字分成两部分。但是改变内部应用需要做很多工作。还有其他想法吗?我们不能改变的主要事情是按位操作的使用。
谢谢。