Postgres使用JSONB列而不是已定义的列

时间:2016-06-17 19:03:27

标签: sql postgresql

Postgres对JSON(甚至是索引)有很多支持。我想把1个jsonb字段称为everything而不是定义一堆类型列(mongodb样式)。

但我认为这是一个坏主意。我的问题是:为什么我不应该这样做?唯一的问题是它可能会占用额外的存储空间吗?

(我的表有很多可选字段,这就是我想这样做的原因)

1 个答案:

答案 0 :(得分:4)

我可以想到几个原因:

  • 如果JSON blob具有其他列的外键,我认为您不能添加REFERENCES约束。

  • 使用列可以非常轻松地强制执行NOT NULL约束,但使用JSON,您必须为每个必需值编写CHECK个约束。

  • JSON比Postgres的类型少。例如,没有日期/时间/时间戳,没有间隔,没有范围,只有一种数字类型,没有IP地址,没有二进制数据。

  • 随着时间的推移,如果您在JSON结构中添加/移动/删除字段,您会发现较旧的行已过时并且您的应用程序无法理解JSON。使用常规列会强制您使整个表保持最新状态。