PostgreSQL hstore2025年03月17日 | 阅读 9 分钟 在本节中,我们将了解 PostgreSQL hstore 数据类型的工作原理、hstore 数据类型的示例,我们还将看到 WHERE 子句与 hstore 的示例,这有助于我们更有效地处理 hstore 数据值。 我们将了解如何在 PostgreSQL hstore 数据类型中添加、更新、删除键值对。 我们将讨论以下运算符,例如 -> 运算符(用于选择特定值的数据)、? 运算符(用于检查 hstore 列中是否存在显式键)、@> 运算符(用于检查键值对)、?& 和 ?| 运算符(用于选择 hstore 列具有各种键的行)。 还将看到 avals()、svals()、akeys()、skeys()、EACH()、hstore_to_json() 函数的用法。 什么是 PostgreSQL hstore 数据类型?在 PostgreSQL 中,我们要了解的下一个数据类型是 hstore,它用于在单元值中存储键值对。对于半结构化数据或具有不常用查询的多个属性的行等各种情况,这始终是正确的方法。 注意:基本上,键和值是文本字符串。PostgreSQL hstore 数据类型语法PostgreSQL hstore 数据类型的语法如下 在我们开始学习 hstore 数据类型之前,我们必须先启用 hstore 扩展,它会为我们的 PostgreSQL 示例加载 contrib 模块。 启用 PostgreSQL hstore 扩展要为我们的 PostgreSQL 设计启用 PostgreSQL hstore 扩展,我们可以使用 Organization 数据库中的 CREATE EXTENSION 命令,如下面的语句所示 输出 执行上述命令后,我们将收到以下消息:hstore 扩展已通过 Create Extension 命令成功安装。 ![]() PostgreSQL hstore 数据类型示例让我们看一个示例来了解 PostgreSQL hstore 数据类型的工作原理。 我们正在使用 CREATE 命令创建一个名为 Movie 的新表,并具有 hstore 列,并使用 INSERT 命令插入一些值。 Movie 表包含 Movie_id、Movie_name、Movie_attr 等多个列,具有以下属性
对于 Movie_attr 列,我们使用了 hstore 数据类型。 为了在启用 hstore 扩展的 Organization 数据库中创建 Movie 表,我们使用 CREATE 命令,如下面的命令所示 输出 执行上述命令后,我们将收到以下消息,显示 Movie 表已成功创建。 ![]() 当 Movie 表成功创建后,我们将使用 INSERT 命令将一些值插入其中。 将值插入 PostgreSQL hstore 列要将值插入 hstore 列,我们使用 INSERT 命令,如下面的语句所示 输出 执行上述命令后,我们将收到以下消息窗口,显示指定的值已成功插入 Movie 表。 ![]() 注意:如上一个插入命令所示,我们插入到 hstore 列的值是逗号分隔的键 => 值对的列表。键和值都用双引号(")括起来。在创建并向 Movie 表插入值后,我们将使用 SELECT 命令检索 Movie 表中的所有数据 从 hstore 列中选择值从 hstore 列中选择值等于使用 SELECT 命令从具有原生数据类型的列中选择值,如下所示 输出 成功执行上述命令后,我们将看到以下输出,显示 Movie 表中的所有数据 ![]() 选择特定键的数据PostgreSQL hstore 数据类型允许我们使用 -> 运算符从 hstore 列(Movie_Attr)中选择特定键的数据值。 在下面的示例中,我们使用 -> 运算符来识别 Movie 表中所有可用电影的 running_time,如下面的命令所示 输出 执行上述命令后,我们将获得以下输出,显示 Movie 表中每部电影的 running_time。 ![]() 在 WHERE 子句中使用 hstore 数据值要过滤 hstore 列的值与输入值匹配的行。因此,在这种情况下,我们可以在 WHERE 子句中使用 -> 运算符。 让我们看一个示例以便更好地理解 在下面的示例中,我们试图获取发行年份为 2019 的电影的 Movie_name 和 Movie_genres。 输出 执行上述命令后,我们将在输出中获得使用 WHERE 子句的 hstore 列的值,如下所示 ![]() 检索 hstore 列中的所有值要检索 hstore 列中的所有数据值,我们可以使用数组中的 avals() 函数。 在下面的示例中,我们使用 avals() 函数从 Movie 表的 hstore 列中获取所有值 输出 执行上述命令后,我们将看到以下输出,显示 Movie 表中可用的所有 Moive_attr 值 ![]() 或 如果我们希望将输出作为集合检索,我们可以使用 svals() 函数。 在下面的命令中,我们使用 svals() 函数而不是 avals() 来获取集合形式的输出 输出 执行上述命令后,我们将获得以下集合形式的输出 ![]() 检索 hstore 列中的所有键就像我们可以使用 avals() 和 svals() 函数从 hstore 列中获取所有值一样,我们可以使用 akeys() 函数来检索 hstore 列中的所有键 输出 执行上述命令后,我们将获得以下输出,显示 Movie 表中 Movie_attr 列的所有键值。 ![]() 或 如果我们希望 PostgreSQL 以集合形式检索输出,我们可以使用 skey() 函数。 在下面的命令中,我们使用 skey() 函数而不是 akeys() 来获取集合形式的输出 输出 执行上述命令后,我们将获得以下集合形式的输出 ![]() 将 hstore 数据修改为集合我们可以使用 EACH() 函数将 hstore 数据修改为集合,如下面的命令所示 输出 成功执行上述命令后,我们将获得以下输出,显示修改后的 hstore 数据为集合。 ![]() 将 hstore 数据修改为 JSON要将 hstore 数据转换为 JSON,PostgreSQL 提供了 hstore_to_json() 函数。 在下面的命令中,我们使用 hstore_to_json() 函数将 hstore 数据值转换为 json 输出 执行上述命令后,我们将获得以下结果,显示我们已成功将 hstore 数据修改为 json。 ![]() 将键值对添加到当前行我们可以向 hstore 列的当前行添加新的键值对。 例如,我们可以将 Country 键添加到 Movie 表的 Movie_attr 列,如下面的命令所示 输出 执行上述命令后,我们将获得以下结果,显示三列已成功更新。 ![]() 现在,如果我们想看到 "Country"=>"United States" 值已成功更新。 输出 执行上述命令后,我们将获得以下结果,显示指定值的 Country Movie_attr 值 United States 已被更新。 ![]() 更新当前的键值对我们可以使用 UPDATE 命令来更新当前的键值对。 例如:在下面的命令中,我们将 "Country" 键的值更新为 "USA"。 输出 执行上述命令后,我们将收到以下消息窗口,显示值已成功更新。 ![]() 删除当前的键值对PostgreSQL 为我们提供了从 hstore 列中删除当前键值对的功能。 让我们看一个示例以便更好地理解 在下面的命令中,我们正在删除 Movie_attr 列中的 "Country"=>"USA" 键值对。 输出 执行上述命令后,我们将收到以下消息窗口,表示指定的值已成功更新。 ![]() 检查 hstore 列中是否存在显式键? 运算符用于在 WHERE 子句中的 hstore 列中检查显式键。 在下面的示例中,下面的命令检索所有包含 Movie_genres 键的 Movie_attr 行。 输出 执行上述命令后,我们将获得以下结果,显示 hstore 列中的指定键。 ![]() 检查键值对我们可以使用 @> 运算符来选择 hstore 键值对。 让我们看一个示例来查看 @> 运算符的用法 下面的命令用于返回 Movie_attr 列中包含键值对的所有行,并且还匹配 "Language"=>"English"。 输出 成功执行上述命令后,我们将获得以下结果,表示 hstore 键值对。 ![]() 选择包含各种指定键的行?& 运算符用于选择 hstore 列具有各种键的行。 在下面的示例中,我们可以获取 Movie,其中 Movie_attr 列同时包含 running_time 和 rating 键 输出 在执行上述命令后,我们将获得以下输出 ![]() 注意:我们也可以在 ?& 运算符的位置使用 ?| 运算符,以检查 hstore 列是否包含键列表中的任何键。在下面的命令中,我们使用 ?| 运算符而不是 ?& 来获取 hstore 列包含键列表中任何键的那些行。 输出 执行上述命令后,与 ?& 运算符的输出相比,我们将获得类似的结果。 ![]() 概述在 PostgreSQL hstore 数据类型部分,可以对 hstore 数据类型执行最有用的操作。 我们已经学习了以下主题
下一主题PostgreSQL 数组 |
我们请求您订阅我们的新闻通讯以获取最新更新。