使用 PostgreSQL 时 hstore 优于 key/value table?

Benefits of hstore over a key/value table with PostgreSQL?

在我们的一个应用程序中,我们需要一些 key/value 对,我们将定期更新它们。

我们最初考虑的 table 类似于:

CREATE TABLE "KeyValue" (
    "Key"   TEXT UNIQUE,
    "Value" TEXT,
    PRIMARY KEY("Key")
);

完全符合我们的需求。

但是在挖掘是否已经内置了一些东西时,我发现了 hstore module,但我无法真正理解使用 hstore 而不是我的老式方法的好处 table。

此外,语法对我来说似乎有点奇怪,在查看示例时我找不到一个简单的示例来解释如何创建一对(例如 "StartDate": "2012/12/25"),阅读它(例如 "2012/12/25"),然后更新它 ("StartDate": "2012/12/26"),并可能删除它。

是否有人可以解释使用 hstore 方法相对于我刚刚在上面编造的传统 table 方法的好处?

我以前用过 hstore 到 Hibernate/Java 之前。我这样做是因为 每行映射的总大小很小 ,但是 table 就像您用行特定的键值对描述的那样会有很多行。我可能弄错了,但我记得 hstore 最初可能是为小地图设计的,但文档页面中不再提及此类内容。此外,我对 hstore 列的要求仅与行相关,对所有列值所做的任何 "reporting" 仅用于开发。

不过,看看你的例子 table,你似乎在寻找 全局唯一的 键,我认为 hstore 在什么时候最有用每行有一个 hstore。我认为你不应该用 hstore 和一些索引来解决 "globally unique keys",虽然你可以这样做。

请注意,您链接到一个不受支持的 postgresql 版本,这里是最新的 hstore documentation. It does have examples of instantiation (SELECT 'a=>1,a=>2'::hstore; or hstore('c', '3')) and the examples section 包含您询问的其余示例。

自从我上次在 postgresql 上开发或维护任何东西以来已经有一段时间了,但我记得,json support was coming up fast and looked interesting. If you are storing anything except opaque strings in your Value column, it might be worth your while to look at the json support as it can support the json datatypes with some limitations