是否有一种合理的方法可以将 int、float 和 boolean 值存储在 Postgres 的同一列中?
如果有类似的东西:
目前我使用 jsonb 来存储它,但现在的问题是,我无法使用例如更大的运算符在表中进行过滤。
查询
SELECT *
FROM points
WHERE value > 0;
返回错误:
ERROR: operator does not exist: jsonb > integer: No operator matches the given name and argument types. You might need to add explicit type casts.
对我来说,在 true
的情况下,可以将 bool 值处理为 1 或 0或false
。是否有可能使用 jsonb 实现这一目标,或者是否有另一种 super 类型可以让我使用能够使用所有三种类型的列?
性能在这里并不是太重要,因为我在该表中的记录很少,我猜最多 5k。
最佳答案
如果您只是存储整数和 float ,通常您会使用 float
或 numeric
专栏。
但是有一个令人讨厌的true
。
您可以转换 JSON...
select *
from test
where value::float > 1;
...但是有一个令人讨厌的true
。
您必须将 bool 值转换为数字才能使其工作。
select *
from test
where
(case when value = 'true' then 1.0 when value = 'false' then 0.0 else value::float end) >= 1;
或者忽略它。
必须围绕类型系统进行工作,这表明 value
实际上是两个甚至三个不同的字段塞进一个字段中。考虑将它们分成多列。
关于sql - 将 int、float 和 boolean 存储在同一数据库列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73912243/