PostgreSQL - hstore类型

PostgreSQL - hstore类型 首页 / PostgreSQL入门教程 / PostgreSQL - hstore类型

无涯教程要了解的下一个数据类型是 hstore ,用于存储 对于不常见的带有服务属性的各种情况,例如半结构化数据或行。

hstore类型语法

PostgreSQL hstore数据类型的语法如下:

variable_name hstore;

在无涯教程开始学习HSTORE数据类型之前,无涯教程必须首先允许HSTORE扩展,该扩展为无涯教程的PostgreSQL加载 control模块

启用PostgreSQL hstore扩展

要为无涯教程的PostgreSQL设计启用PostgreSQL hstore扩展,无涯教程可以在 Organization 数据库中使用 CREATE EXTENSION 命令,如以下语句所示:

CREATE EXTENSION hstore;

执行完上述命令后,无涯教程将收到以下消息: hstore扩展已通过 Create Extension 命令成功安装。

PostgreSQL hstore

hstore类型示例

让无涯教程看一个示例示例,以了解 PostgreSQL hstore数据类型的工作方式。

无涯教程是创建一个新表作为 Movie  hstore列,使用create命令的帮助,并使用它插入一些值插入命令。

Movie 表包含各种列,例如 Movie_id,Movie_name,Movie_attr ,并具有以下属性:

  • Movie_id         -  是用于查找电影的主键。
  • Movie_name  -  是电影的其他名称
  • Movie_attr      -  用于包含电影的属性,例如,评分,电影类型,语言,放映时间和发行年份

对于 movie_attr 列,无涯教程使用了hstore 数据类型。

CREATE TABLE Movie (
	Movie_id serial primary key,
	Movie_name VARCHAR,
	Movie_Attr hstore
);

执行上述命令后,无涯教程将收到以下消息,该消息显示 Movie 表已成功创建。

PostgreSQL hstore

将值插入hstore列

要将值插入hstore列,如以下语句所示:

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 表。

PostgreSQL hstore

 Movie 表中创建并插入值之后,无涯教程将使用 SELECT 命令从 中检索所有数据

从hstore列中选择值

hstore列中选择列中选择值。如下图所示:

Select * 
FROM Movie;

成功执行上述命令后,无涯教程将获得以下输出,其中显示 Movie 表中存在的所有数据:

PostgreSQL hstore

选择特定键的数据

PostgreSQL的hstore数据类型允许无涯教程使用->运算符从hstore列(Movie_Attr)中选择特定键的数据值。

在下面的示例中,无涯教程使用->运算符在Movie表中标识所有可用电影的运行时间,如以下命令所示:

SELECT
Movie_attr -> 'running_time' AS Time_duration
FROM
Movie;

在实现上面的命令后,无涯教程将获得以下输出,该命令显示每个电影的 runing_time Movie 表。

PostgreSQL hstore

WHERE hstore数据值

在下面的示例中,无涯教程正在尝试获得 movie_name movie_genres ,它具有 reliase_year 值匹配2019:

SELECT
Movie_name, Movie_attr -> 'movie_genres' AS Genres
FROM Movie
WHERE Movie_attr -> 'release_year' = '2019';

实施上述命令后,无涯教程将在输出中使用 WHERE子句获取 hstore列的值,如下所示:

PostgreSQL hstore

从hstore列中检索所有值

要从hstore列中检索所有数据值,无涯教程可以在数组中使用 avals()函数

在以下示例中,无涯教程借助于 avals()函数从 Movie 表中的hstore列获取所有值:

SELECT avals (Movie_attr)
FROM Movie;

执行上述命令后,无涯教程将获得以下输出,其中显示 Movie 表中所有可用的 Moive_attr 值:

PostgreSQL hstore

如果无涯教程要作为一组检索输出,无涯教程可以使用 svals()函数。

在以下命令中,无涯教程使用 svals()函数而不是 avals()将输出作为一个集合:

SELECT svals (Movie_attr)
FROM Movie;

在执行上述命令时,无涯教程将获得以下输出:

PostgreSQL hstore

从hstore列中检索所有键

就像无涯教程可以使用 avals()和svals()函数从hstore列中获取所有值一样,无涯教程可以使用 akeys()函数从hstore中检索所有键:

SELECT akeys (Movie_attr)
FROM Movie;

实施上述命令后,无涯教程将获得以下输出,其中显示 Movie 表中可用的 Movie_attr 列的所有 key 值:

PostgreSQL hstore

如果无涯教程希望PostgreSQL以集合的形式检索输出,则可以使用 skey()函数

在以下命令中,无涯教程使用 skey()函数而不是 akeys()将输出作为一个集合:

SELECT skeys (Movie_attr)
FROM Movie;

执行上述命令后,无涯教程将获得以下输出结果:

PostgreSQL hstore

将hstore数据修改为集合

无涯教程可以使用 EACH()函数来将hstore数据修改为集合,如下面的命令所示:

SELECT Movie_name, 
(EACH(Movie_attr)).* 
FROM Movie;

成功执行上述命令后,无涯教程将获得以下输出,该命令将修改后的hstore数据显示为集合:

PostgreSQL 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:

PostgreSQL hstore

将键值对添加到当前行

无涯教程可以使用hstore列将新的键值对添加到当前行。

例如,无涯教程可以将 Country (国家/地区)键添加到 Movie Movie_attr 列中,如以下命令所示:

UPDATE Movie
SET Movie_attr = Movie_attr || '"Country"=>"United States"'::hstore;

执行完上述命令后,无涯教程将得到以下结果,这表明三列已成功更新。

PostgreSQL hstore

现在,如果无涯教程希望看到“ Country” =>“ United States”值已成功更新。

SELECT Movie_name,
Movie_attr -> 'Country' AS Country
FROM Movie;

实施上述命令后,无涯教程将获得以下结果

PostgreSQL hstore

更新当前键值对

无涯教程可以在 UPDATE 命令的帮助下更新当前键值对

例如:在下面的命令中,无涯教程将更新"USA"的"Country"键的值。

UPDATE Movie
SET Movie_attr = Movie_attr || '"Country"=> "USA"' ::hstore;

实施上述命令后,无涯教程将获得以下消息窗口,该窗口显示值已成功更新。

PostgreSQL hstore

删除当前键值对

PostgreSQL为无涯教程提供了从hstore列中删除当前键/值对的函数。

让无涯教程查看一个样本示例以获得更好的理解:

在下面的命令中,无涯教程要删除Movie_ attr列中的“Country” =>“USA”键/值对。

UPDATE Movie
SET Movie_attr = delete(Movie_attr, 'Country');

实施上述命令后,无涯教程将获得以下消息窗口,该窗口显示指定的值已成功更新。

PostgreSQL hstore

检查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列中显示指定的键。

PostgreSQL hstore

检查键值对

无涯教程可以使用@>运算符来选择hstore键值对,让无涯教程看一个示例来了解@>运算符的用法:

以下命令用于从Movie_attr列返回包含键值对的所有行,并且还匹配 "Language"=>"English".

SELECT Movie_name
FROM Movie
WHERE Movie_attr @> '"language"=>"English"' ::hstore;

成功执行以上命令后,无涯教程将获得以下结果,表示hstore键值对。

PostgreSQL hstore

选择具有各种指定键的行

?&运算符用于选择其hstore列具有各种键的行。

在以下示例中,无涯教程可以获取Movie,其中 Movie_attr 列同时包含 running_time rating 键:

SELECT Movie_name
FROM Movie
WHERE 
Movie_attr ?& ARRAY [ 'running_time', 'rating' ];

执行完以上命令后,无涯教程将得到以下输出:

链接:https://www.learnfk.comhttps://www.learnfk.com/postgresql/postgresql-hstore.html

来源:LearnFk无涯教程网

PostgreSQL hstore
SELECT Movie_name
FROM Movie
WHERE 
Movie_attr ?| ARRAY [ 'running_time', 'rating' ];

执行上述命令后,与?&运算符的输出相比,无涯教程将得到类似的结果:

PostgreSQL hstore

    祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

    技术教程推荐

    从0开始学架构 -〔李运华〕

    编辑训练营 -〔总编室〕

    Django快速开发实战 -〔吕召刚〕

    A/B测试从0到1 -〔张博伟〕

    零基础入门Spark -〔吴磊〕

    PyTorch深度学习实战 -〔方远〕

    李智慧 · 高并发架构实战课 -〔李智慧〕

    结构思考力 · 透过结构看思考 -〔李忠秋〕

    程序员职业规划手册 -〔雪梅〕

    好记忆不如烂笔头。留下您的足迹吧 :)