PostgreSQL hstore
在本节中,我们将了解
hstore数据的 PostgreSQL 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扩展已成功安装,且
创建扩展命令。
PostgreSQL hstore示例数据类型
让我们看一个示例示例,以了解
PostgreSQL hstore数据类型的工作原理。
我们正在
创建一个新表作为
电影 和
hstore列,并在CREATE命令的帮助下并使用INSERT命令插入一些值。
电影 表包含诸如
Movie_id,Movie_name,Movie_attr 之类的各种列,并具有以下属性:
电影ID 是主键,用于查找电影。
电影名称是电影的其他名称
电影属性列用于包含电影的属性,例如,评分,电影类型,语言,放映时间和发行年份。
对于
Movie_attr 列,我们使用了hstore
数据类型。
要创建
电影 表放入类似的
数据库,即组织,在其中启用hstore扩展,我们使用
CREATE 命令,如以下命令:
CREATE TABLE Movie (
Movie_id serial primary key,
Movie_name VARCHAR,
Movie_Attr hstore
);
输出
在执行上述命令时,我们将收到以下消息,该消息显示
电影 表已成功创建。
电影
em> 表创建成功,我们将在 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"'
);
输出
执行上述命令后,我们将获得以下消息窗口,该窗口显示指定的值已成功插入
电影 表。
注意: 正如我们在上面的插入命令中看到的那样,我们插入到hstore列中的值是一个逗号分隔键=>值对的列表。键和值都用双引号(")引起来。
在 电影 表中创建并插入值之后,我们将使用 SELECT 命令来从 Movie
表中检索所有数据:
从hstore列中选择值
选择值从
hstore列中进行的操作等于在 SELECT的帮助下从具有本机数据类型的列中选择一个值命令,如下所示:
输出
成功执行上述命令后,我们将获得以下输出,其中显示了
电影
中存在的所有数据 表:
选择特定数据key
PostgreSQL hstore数据类型允许我们使用
-> 运算符从
hstore列(Movie_Attr)中选择特定密钥的数据值。
在下面的示例中,我们使用
-> 运算符来标识
电影 表,如以下命令所示:
SELECT
Movie_attr-> 'running_time' AS Time_duration
FROM
Movie;
输出
执行上述命令后,我们将获得以下输出,该命令显示
中每部电影的 running_time >电影 表。
使用在WHERE子句中hstore数据值
要过滤
hstore列的值与
输入值匹配的行。因此,在这种情况下,我们可以在
位置中使用
->运算符 strong>子句。
让我们看一个示例示例,以使我们更好地理解:
在下面的示例中,我们试图获取该电影的
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()函数从
电影 表的hstore列中获取所有值:
SELECT avals (Movie_attr)
FROM Movie;
输出
执行上述命令后,我们将获得以下输出,其中显示
Moive_attr 中所有可用的值>电影表:
OR
如果要按组检索输出,可以使用
svals()函数。
在以下命令中,我们使用
svals()函数,而不是
avals()来获得一组输出:
SELECT svals (Movie_attr)
FROM Movie;
输出
在执行上述命令时,我们将获得以下输出:
从hstore列中检索所有键
从hstore列中获取所有值,就像我们可以使用
avals()和svals()函数,我们可以使用
akeys()函数从hstore列中检索所有键:
SELECT akeys (Movie_attr)
FROM Movie;
输出
在执行上述命令时,我们将获得以下输出,其中显示了
的所有 key 值电影表中的Movie_attr 列:
OR
如果我们希望PostgreSQL以集合的形式检索输出,则可以使用
skey()函数。
在以下命令中,我们使用
skey()函数而不是
akeys()将输出作为一个集合:
SELECT skeys (Movie_attr)
FROM Movie;
输出
执行上述命令后,我们将得到以下输出为一组:
Modi将hstore数据设置为集合
我们可以使用
EACH()函数将hstore数据修改为集合,如以下命令所示:
SELECT Movie_name,
(EACH(Movie_attr)).*
FROM Movie;
输出
成功执行上述命令后,我们将获得以下输出,该命令将修改后的hstore数据显示为集合:
将hstore数据修改为JSON
要将hstore数据更改为
JSON ,PostgreSQL提供了
hstore_to_json()函数。
在以下命令中,我们使用
hstore_to_json()函数进行转换
hstore 数据值到
json :
SELECT Movie_name,
hstore_to_json (Movie_attr) json
FROM Movie;
输出
执行上述命令后,我们将获得以下结果,这表明我们已成功将hstore数据修改为json:
将键值对添加到当前行
我们可以添加使用hstore列将新的键值对添加到当前行。
例如,我们可以将
Country 键添加到
Movie_attr我们在以下命令中看到的 Movie 表的列:
UPDATE Movie
SET Movie_attr = Movie_attr || '"Country"=>"United States"':: hstore;
输出
执行上述命令后,我们将得到以下结果,表明三列已成功更新。
现在,如果我们想看到
" Country" =>" United States" 值已成功更新。
SELECT Movie_name,
Movie_attr-> 'Country' AS Country
FROM Movie;
输出
在执行上述命令时,我们将获得以下结果,该命令显示
Country (国家/地区)
Movie_attr 值
美国已更新为指定值。
更新当前键值对
我们可以在
UPDATE 命令的帮助下更新
当前键值对。
例如: 在下面的命令中,我们将"国家"键的值更新为"美国"。
UPDATE Movie
SET Movie_attr = Movie_attr || '"Country"=> "USA"' ::hstore;
输出
执行上述命令后,我们将获得以下消息窗口,该窗口显示值已成功更新。
删除当前键值对
PostgreSQL为我们提供了删除hstore列中的当前键值对。
让我们看一个示例示例,以使我们更好地理解:
在以下命令中,我们将删除
"国家/地区" 电影属性列中的=>"美国"键值对。
UPDATE Movie
SET Movie_attr = delete(Movie_attr, 'Country');
输出
执行上述命令后,我们将获得以下消息窗口,其中显示指定值已成功更新。
检查hstore列中的显式键
?运算符用于检查
WHERE 子句中
hstore列中的显式键。
在以下示例中,下面的命令使用
Movie_attr 检索所有行,其中包含键
Movie _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
借助->运算符,我们可以选择特定值的数据。
我们在位置中使用了 hstore数据类型
我们还可以使用 avals()函数从hstore列中检索值。
要获取输出为一组,我们可以使用 svals()函数。
我们还可以借助 akeys() 从hstore值中返回所有密钥。
并且要返回输出为一组,我们可以使用 skeys()函数。
我们已使用 EACH()函数将hstore数据修改为集合。
在PostgreSQL的hstore数据类型部分中,我们还可以使用 hstore_to_json()函数 将hstore数据更改为json 。
我们还可以添加,更新,删除 PostgreSQL hstore数据类型中的键-值对。
我们还讨论了以下运算符,例如?((用于检查hstore列中的显式键),@>(用于检查键值对),?&和?|(选择其hstore列中的行有各种键)。