如何在postgresql上创建类似SET的类型

Edd*_*nho 14 sql postgresql

我想创建添加一个工作日列,以便我们可以选择更多然后只有一天,

我知道枚举类型可以做到,但我们只能选择一个项目

那么如何在PostgreSQL上创建数据类型,以便我们可以像mysql上的set一样有多选enum?

非常感谢.

Dan*_*ele 9

使用HSTORE列类型.HSTORE存储键/值对.如果您只关心检查密钥是否存在,则可以使用空值.

请参阅https://www.postgresql.org/docs/current/static/hstore.html.

例如,在我的hstore中询问Is'x'?,做

CREATE EXTENSION HSTORE;  --create extension only has to be done once
SELECT * FROM 'x=>null,y=>null,z=>null'::HSTORE ? 'x';
Run Code Online (Sandbox Code Playgroud)

我相信这是操作是O(1).相反,检查ARRAY-type列中的包含是O(n).

  • 不幸的是,`hstore`的底层存储实际上只是一个k/v对的数组.我是我的测试``````hstore`比使用`&&`运算符的数组慢2-4倍. (4认同)

use*_*140 6

位字符串 BIT(n)是 PostgreSQL 最接近 MySQL 的SET类型。

对于一周中的几天,请使用BIT(7)

与 MySQL 的 不同SETBIT类型的宽度不限于 64 位或更少。


a_h*_*ame 5

我猜想数组是最可怕的集合数据类型的匹配。

但是该解决方案尚未标准化,因此您可能会遇到几个问题。我建议将其存储在正确归一化的表中,尤其是如果您打算查询所选值或对此进行其他报告时,尤其如此。