PostgreSQLhstore-PostgreSQL教程|
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教程]PostgreSQL教程-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL特性-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL版本-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL语法-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL创建数据库-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL选择数据库-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL删除/删除数据库-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL创建表-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL删除/删除表-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL显示表-PostgreSQL教程|
相关推荐:
- [PostgreSQL教程]PostgreSQL与SQLite-PostgreSQL教程|
- [PostgreSQL教程]MongoDB与PostgreSQL-PostgreSQL教程|
- [PostgreSQL教程]psqlcommands-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQLDate&TimeFunction-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQLFunctions-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQLMulti-columnIndexes-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL禁用触发器-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL左连接-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQLANDCondition-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL获取子句-PostgreSQL教程|
- PostgreSQL与SQLite-PostgreSQL教程|
- PostgreSQL与Oracle-PostgreSQL教程|
- PostgreSQL与MariaDB-PostgreSQL教程|
- PostgreSQL与SQLServer-PostgreSQL教程|
- MongoDB与PostgreSQL-PostgreSQL教程|
- PostgreSQLEXCEPT-PostgreSQL教程|
- PostgreSQLINTERSECT-PostgreSQL教程|
- PostgreSQLUnion-PostgreSQL教程|
- psqlcommands-PostgreSQL教程|
- PostgreSQLDate&TimeFunction-PostgreSQL教程|
- PostgreSQL删除触发器-PostgreSQL教程|
- PostgreSQLOrderby子句-PostgreSQL教程|
- PostgreSQL与SQLite-PostgreSQL教程|
- PostgreSQLINTERSECT-PostgreSQL教程|
- PostgreSQLAlias-PostgreSQL教程|
- PostgreSQLNot-NullConstraint-PostgreSQL教程|
- PostgreSQL与MariaDB-PostgreSQL教程|
- PostgreSQLUnion-PostgreSQL教程|
- PostgreSQLMulti-columnIndexes-PostgreSQL教程|
- PostgreSQL左连接-PostgreSQL教程|