【发布时间】:2022-10-04 20:49:04
【问题描述】:
在 Postgres 的同一列中存储 int、float 和 boolean 值是否有合理的方法?
如果有类似的东西:
| rid | time | value |
|---|---|---|
| 2d9c5bdc-dfc5-4ce5-888f-59d06b5065d0 | 2021-01-01 00:00:10.000000 +00:00 | true |
| 039264ad-af42-43a0-806b-294c878827fe | 2020-01-03 10:00:00.000000 +00:00 | 2 |
| b3b1f808-d3c3-4b6a-8fe6-c9f5af61d517 | 2021-01-01 00:00:10.000000 +00:00 | 43.2 |
目前我正在使用 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或false的情况下将布尔值处理为 1 或 0 是可以的。是否有可能使用 jsonb 实现这一目标,或者是否有另一种超级类型可以让我使用能够使用所有三种类型的列?性能在这里不是那么重要,因为我在该表中将有很少的记录,我猜最多 5k。
【问题讨论】:
-
如果你想使用
>,那应该如何使用true?这真的是一个领域还是两个领域,甚至三个领域? -
如果没有看到
value的示例,就没有太多可以做的答案。也没有解释为什么要在列中混合类型?对我来说,这是糟糕设计的标志。
标签: sql json postgresql jsonb