PostgreSQL hstore PostgreSQL JSON PostgreSQL Array PostgreSQL hstore 在本节中,我们要了解的工作PostgreSQL的hstore数据类型,例子中的hstore数据类型,我们,也看到的例子hstore用WHERE子句,这有助于我们处理hstore数据值更机智。 我们将了解如何添加、更新、删除PostgreSQL hstore 数据类型中的键值对。 我们将讨论以下运算符,例如-> 运算符(选择特定值的数据),?运算符(检查 hstore 列中的显式键)、@> 运算符(检查键值对)、?& 和 ?|Operator(选择 hstore 列具有不同键的行)。 并且还可以看到avals(), svals(), akeys() skeys(), EACH(), hstore_to_json() 函数的用法。 什么是 PostgreSQL hstore 数据类型? 在PostgreSQL 中,我们将要了解的下一个数据类型是hstore,它用于将键值对存储在单元值中。对于各种情况,例如半结构化数据或行,它始终是正确的方法,具有不常查询的 serval 属性。 注意:基本上,键和值是文本字符串。 PostgreSQL hstore 数据类型的语法 PostgreSQL hstore 数据类型的语法如下: variable_name hstore; 在我们开始学习 hstore 数据类型之前,我们必须首先允许 hstore 扩展,它为我们的 PostgreSQL 插图加载contrib 模块。 启用 PostgreSQL hstore 扩展 要为我们的 PostgreSQL 设计启用 PostgreSQL hstore 扩展,我们可以在组织数据库中使用CREATE EXTENSION命令,如下面的语句所示: CREATE EXTENSION hstore; 输出 执行上述命令后,我们将得到以下消息:已使用Create Extension命令成功安装了hstore 扩展。 PostgreSQL hstore 数据类型示例 让我们看一个示例来了解PostgreSQL hstore 数据类型的工作原理。 我们正在使用 CREATE 命令的帮助创建一个新表作为Movie\和hstore 列,并使用 INSERT 命令插入一些值。 该电影\表包含各列如Movie_id,MOVIE_NAME,Movie_attr并具有以下特性: 该Movie_id是主键,这是用来查找电影。 Movie_name是电影的其他名称 并且Movie_attr列用于包含 Movies 的属性,例如rating、movie_genres、language、running_time 和 release year。 对于Movie_attr列,我们使用了 hstore数据类型。 要将Movie\表创建到类似的组织数据库中,我们在其中启用 hstore 扩展,我们使用CREATE命令,如下面的命令所示: CREATE TABLE Movie ( Movie_id serial primary key, Movie_name VARCHAR, Movie_Attr hstore ); 输出 在执行上述命令时,我们将收到以下消息,表明已成功创建Movie\表。 当Movie\表创建成功后,我们将在INSERT命令的帮助下向其中插入一些值。 将值插入 PostgreSQL hstore 列 要将值插入到 hstore 列中,我们使用INSERT 命令,如下面的语句所示: INSERT INTO Movie (Movie_name, Movie_attr) VALUES ( 'Avengers Endgame', '"rating" => "8.4", "movie_genres" => "Action/Sci-fi", "language" => "English", "release_year" => "2019", "running_time" => "181 Minutes"' ), ( 'US', '"rating" => "6.9", "movie_genres" => "Horror/Thriller", "language" => "English", "release_year" => "2019", "running_time" => "116 Minutes"' ), ( 'Dolittle', '"rating" => "5.6", "movie_genres" => "Adventure/Family ", "language" => "English", "release_year" => "2020", "running_time" => "101 Minutes"' ); 输出 执行上述命令后,我们会得到如下消息窗口,显示指定的值已成功插入到Movie\表中。 注意:正如我们在上面的插入命令中看到的,我们插入到 hstore 列中的值是一个逗号分隔的键 => 值对列表。并且键和值都使用双引号 (") 引用。 在Movie\表中创建并插入值后,我们将使用SELECT命令从Movie\表中检索所有数据: 从 hstore 列中选择值 从hstore 列中选择值等同于在SELECT 命令的帮助下从具有本机数据类型的列中选择值,如下所示: Select * FROM Movie; 输出 成功执行上述命令后,我们将得到以下输出,其中显示了Movie\表中存在的所有数据: 为特定键选择数据 PostgreSQL hstore 数据类型允许我们使用->运算符从hstore 列(Movie_Attr) 中选择特定键的数据值。 在下面的示例中,我们使用->运算符来标识Movie\表中所有可用电影的running_time,如下面的命令所示: SELECT Movie_attr -> 'running_time' AS Time_duration FROM Movie; 输出 执行上述命令后,我们将得到以下输出,其中显示了Movie\表中每部电影的running_time。 在 WHERE 子句中使用 hstore 数据值 过滤hstore 列的值与输入值匹配的行。因此,对于这种情况,我们可以在WHERE子句中使用-> 运算符。 让我们看一个示例以更好地理解: 在下面的示例中,我们尝试获取电影的Movie_name和Movie_genres,其中Relases_year值与 2019 匹配: SELECT Movie_name, Movie_attr -> 'movie_genres' AS Genres FROM Movie WHERE Movie_attr -> 'release_year' = '2019'; 输出 执行上述命令后,我们将在输出中使用WHERE 子句获取hstore 列的值,如下所示: 从 hstore 列中检索所有值 要从 hstore 列中检索所有数据值,我们可以在数组中使用avals() 函数。 在以下示例中,我们在avals()函数的帮助下从Movie\表中的 hstore 列中获取所有值: SELECT avals (Movie_attr) FROM Movie; 输出 执行上述命令后,我们将得到以下输出,其中显示了Movie表中可用的所有Moive_attr值: 或者 如果我们想以集合的形式检索输出,我们可以使用svals()函数。 在以下命令中,我们使用svals() 函数而不是avals( ) 来获取作为集合的输出: SELECT svals (Movie_attr) FROM Movie; 输出 执行上述命令后,我们将获得以下输出: 从 hstore 列中检索所有键 就像我们可以使用avals() 和 svals()函数从 hstore 列中获取所有值一样,我们可以使用akeys() 函数从 hstore 列中检索所有键: SELECT akeys (Movie_attr) FROM Movie; 输出 执行上述命令后,我们将获得以下输出,其中显示了Movie表中可用的Movie_attr列的所有键值: 或者 如果我们希望 PostgreSQL 作为一个集合检索输出,我们可以使用skey() 函数。 在以下命令中,我们使用skey() 函数而不是akeys( ) 来获取作为集合的输出: SELECT skeys (Movie_attr) FROM Movie; 输出 执行上述命令后,我们将得到以下输出作为集合: 将 hstore 数据修改为集合 我们可以使用EACH() 函数将 hstore 数据修改为集合,如下面的命令所示: SELECT Movie_name, (EACH(Movie_attr)).* FROM Movie; 输出 成功执行上述命令后,我们将得到以下输出,将修改后的 hstore 数据显示为集合: 将 hstore 数据修改为 JSON 要将 hstore 数据更改为JSON, PostgreSQL 提供了hstore_to_json()函数。 SELECT Movie_name, hstore_to_json (Movie_attr) json FROM Movie; 输出 执行上述命令后,我们会得到如下结果,说明我们已经成功将hstore数据修改为json: 将键值对添加到当前行 我们可以使用 hstore 列向当前行添加一个新的键值对。 例如,我们可以将Country键添加到Movie\表的Movie_attr列,如下面的命令所示: UPDATE Movie SET Movie_attrMovie_attr = Movie_attr || '"Country"=>"United States"':: hstore; 输出 执行上面的命令后,我们会得到下面的结果,这表明三列已经更新成功。 现在,如果我们要查看“Country”=>“United States”值是否已成功更新。 SELECT Movie_name, Movie_attr -> 'Country' AS Country FROM Movie; 输出 执行上述命令,我们将得到以下结果,显示Country Movie_attr值United States已更新为指定值。 更新当前的键值对 我们可以在UPDATE命令的帮助下更新当前的键值对。 例如:在下面的命令中,我们将“Country”键的值更新为“USA”。 UPDATE Movie SET Movie_attrMovie_attr = Movie_attr || '"Country"=> "USA"' ::hstore; 输出 执行上述命令后,我们将得到以下消息窗口,显示值已成功更新。 删除当前键值对 PostgreSQL 为我们提供了从 hstore 列中删除当前键值对的功能。 让我们看一个示例以更好地理解: 在下面的命令中,我们将删除Movie_ attr列中的“Country”=>“USA ”键值对。 UPDATE Movie SET Movie_attr = delete(Movie_attr, 'Country'); 输出 执行上述命令后,我们将得到以下消息窗口,表示指定的值已成功更新。 检查 hstore 列中的显式键 的?运算符用于检查在明确的关键hstore列的内WHERE子句。 在以下示例中,下面的命令检索与所有行Movie_attr,它包含键电影_genres。 SELECT Movie_name, Movie_attr->'movie_genres' as genres, Movie_attr FROM Movie WHERE Movie_attr ? 'movie_genres'; 输出 执行上述命令,我们将得到以下结果,其中显示了 hstore 列中的指定键。 检查键值对 我们可以使用@> 运算符来选择 hstore 键值对。 让我们看一个例子来看看@> 操作符的用法: 下面的命令用于返回包含来自Movie_attr列的键值对的所有行,并且还匹配"Language"=>"English"。 SELECT Movie_name FROM Movie WHERE Movie_attr @> '"language"=>"English"' :: hstore; 输出 成功执行上述命令后,我们将得到以下结果,表示 hstore 键值对。 选择具有各种指定键的行 的?&运算符用于选择具有各种键,其hstore列的行。 在以下示例中,我们可以获取Movie,其中Movie_attr列包含running_time和rating键: SELECT Movie_name FROM Movie WHERE Movie_attr ?& ARRAY [ 'running_time', 'rating' ]; 输出 执行上述命令后,我们将得到以下输出: 注意:我们也可以使用 ?| 运算符在 ?& 运算符的位置,以检查其 hstore 列是否包含键列表中的任何键的行。 在以下命令中,我们使用?| 运算符而不是?&以获取其hstore 列包含键列表中的任何键的那些行: SELECT Movie_name FROM Movie WHERE Movie_attr ?| ARRAY [ 'running_time', 'rating' ]; 输出 执行上述命令后,与?&运算符的输出相比,我们将得到类似的结果: 概述 在PostgreSQL hstore 数据类型部分中最有用的操作,我们可以针对 hstore 数据类型执行。 我们学习了以下主题: 所述的PostgreSQL hstore数据类型被用来存储在单位值键值对。 我们使用Create Extension启用了 PostgreSQL hstore 在-> 运算符的帮助下,我们可以选择特定值的数据。 我们在WHERE 中使用了hstore 数据类型 我们还可以使用avals() 函数从 hstore 列中检索值。 为了将输出作为一个集合,我们可以使用svals() 函数。 我们还可以在akeys()的帮助下从 hstore 值中返回所有键 要将输出作为集合返回,我们可以使用skeys() 函数。 我们已经使用EACH() 函数将 hstore 数据修改为集合。 在 PostgreSQL 的 hstore 数据类型部分,我们还可以使用hstore_to_json() 函数**将 hstore 数据更改为 json**。 我们还可以添加、更新、删除PostgreSQL hstore 数据类型中的键值对。 我们还讨论了以下运算符,例如,?(检查 hstore 列中的显式键)、@>(检查键值对)、?& 和 ?|(选择 hstore 列具有不同键的行)。 PostgreSQL JSON PostgreSQL Array