用postgres在一行中处理多个布尔项目?

Posted

技术标签:

【中文标题】用postgres在一行中处理多个布尔项目?【英文标题】:Handle multiple boolean items in a single row with postgres? 【发布时间】:2021-11-29 08:51:54 【问题描述】:

我有一个超过 12 列的表,其中只有布尔项!如何用单列管理?

作为要求的一部分,这需要是动态的(从某种意义上说,列将来可能会增加)所以它应该在不改变表的情况下运行!

实现这一目标的最佳方法是什么?

Table Users:
     married: False
     profession_provided: False
     location_provided: True
     certificates_provided: False
     exams_provided: True

像上面一样,我有超过 12 列,并且在不久的将来这可能会增加 - 那么有什么方法可以处理这个 - 例如使用 Json 或数组或按位等

我读过一些文章说按位可以这样存储:

0010101

所以如果它为 0 则为假,否则为真!这是值得信赖的还是有任何有效的方法来处理这个问题?

【问题讨论】:

“最佳方式”很大程度上取决于您对“好”的定义。速度?简单?贮存? ... 【参考方案1】:

以下是一些节省空间的解决方案:

Is there any difference between integer and bit(n) data types for a bitmask?

boolean (bool[]) 的数组将是另一个仍然相对节省空间的选项。

如果不关心存储,您可以只添加一个文档类型列(json, jsonbhstore),以允许动态(无模式)增长,并更明确地存储键和值。

【讨论】:

以上是关于用postgres在一行中处理多个布尔项目?的主要内容,如果未能解决你的问题,请参考以下文章

如何按postgres数组中的多个ID分组

在 Postgres 的单个索引中包含多个列

使用 ruby​​ on rails 将布尔值保存到 postgres 数据库

如何让我在 Heroku 上的 Laravel 项目使用 Heroku Postgres?

SQL(Postgres)为列表参数中的每个项目获取一行,其优先顺序由另一列指定

如何在 Postgres 函数中检索多个结果行?