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
。它允许您有效地存储长位串。
有一个使用 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
。它允许您有效地存储长位串。