加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

PostgreSQL何以支持丰富的NoSQL特性?

发布时间:2018-10-14 08:04:57 所属栏目:编程 来源:DBAplus社群
导读:【新品产上线啦】51CTO播客,随时随地,碎片化进修 作者先容 谭峰,网名francs,中国开源软件推进同盟PostgreSQL分会特聘专家,《PostgreSQL拭魅战》作者之一,《PostgreSQL 9 Administration Cookbook》译者之一。现就职于浙江移动认真应用上云架构管控以及
副问题[/!--empirenews.page--] 【新品产上线啦】51CTO播客,随时随地,碎片化进修

PostgreSQL何故支持富厚的NoSQL特征?

作者先容

谭峰,网名francs,中国开源软件推进同盟PostgreSQL分会特聘专家,《PostgreSQL拭魅战》作者之一,《PostgreSQL 9 Administration Cookbook》译者之一。现就职于浙江移动认真应用上云架构管控以及私有云建树事变。

张文升,中国开源软件推进同盟PostgreSQL分会焦点成员之一,《PostgreSQL拭魅战》作者之一,活泼于PostgreSQL、MySQL、Redis等开源技能社区,致力于敦促PostgreSQL在互联网企业的应用及企业PostgreSQL培训与技能支持。

在上一篇文章《PostgreSQL用户应把握的高级SQL特征》我们先容了PostgreSQL的典范高级SQL特征。PostgreSQL不只是相关型数据库,同时支持富厚的NoSQL特征,以是本文将先容PostgreSQL的NoSQL特征,分以下三部门来先容:

  • PostgreSQL的JSON和JSONB数据范例简介;

  • JSON与JSONB读写机能测试;

  • PostgreSQL全文检索支持JSON和JSONB(PosgreSQL 10新特征)。

一、JSON和JSONB数据范例

PostgreSQL支持非相关数据范例json (JavaScript Object Notation),本节先容json范例、json与jsonb差别、json与jsonb操纵符和函数以及jsonb键值的追加、删除、更新。

1、JSON范例简介

PotgreSQL早在9.2版本已经提供了json范例,而且跟着大版本的演进,PostgreSQL对json的支持趋于完美,譬喻提供更多的json函数和操纵符利便应用开拓,一个简朴的json范例例子如下:

  1. mydb=> SELECT '{"a":1,"b":2}'::json; 
  2. json 
  3. --------------- 
  4. {"a":1,"b":2} 

为了更好演示json范例,接下来建设一张表,如下所示:

  1. mydb=> CREATE TABLE test_json1 (id serial primary key,name json);  
  2. CREATE TABLE 

以上示例界说字段name为json范例,插入表数据,如下所示:

  1. mydb=> INSERT INTO test_json1 (name)  
  2. VALUES ('{"col1":1,"col2":"francs","col3":"male"}');  
  3. INSERT 0 1  
  4. mydb=> INSERT INTO test_json1 (name)  
  5. VALUES ('{"col1":2,"col2":"fp","col3":"female"}');  
  6. INSERT 0 1 

查询表test_json1数据:

  1. mydb=> SELECT * FROM test_json1;  
  2. id | name  
  3. ----+------------------------------------------  
  4. 1 | {"col1":1,"col2":"francs","col3":"male"}  
  5. 2 | {"col1":2,"col2":"fp","col3":"female"} 

2、查询JSON数据

通过->操纵符可以查询json数据的键值,如下所示:

  1. mydb=> SELECT name -> 'col2' FROM test_json1 WHERE id=1;  
  2. ?column?  
  3. ----------  
  4. "francs"  
  5. (1 row) 

假如想以文本名目返回json字段键值可以行使->>符,如下所示:

  1. mydb=> SELECT name ->> 'col2' FROM test_json1 WHERE id=1;  
  2. francs  
  3. (1 row) 

3、JSONB与JSON差别

PostgreSQL支持两种JSON数据范例:json和jsonb,两种范例在行使上险些完全沟通,首要区别如下:

json存储名目为文本,而jsonb存储名目为二进制 ,因为存储名目标差异使得两种json数据范例的处理赏罚服从纷歧样,json范例以文本存储而且存储的内容和输入数据一样,当检索json数据时必需从头理会,而jsonb以二进制情势存储已理会好的数据,当检索jsonb数据时不必要从头理会,因此json写入比jsonb快,但检索比jsonb慢,后头会通过测试验证两者读写机能差别。

除了上述先容的区别之外,json与jsonb在行使进程中还存在差别,譬喻jsonb输出的键的次序和输入纷歧样,如下所示:

  1. mydb=> SELECT '{"bar": "baz", "balance": 7.77, "active":false}'::jsonb; 
  2. jsonb 
  3. -------------------------------------------------- 
  4. {"bar": "baz", "active": false, "balance": 7.77} 
  5. (1 row) 

而json的输出键的次序和输入完全一样,如下所示:

  1. mydb=> SELECT '{"bar": "baz", "balance": 7.77, "active":false}'::json;  
  2. json  
  3. -------------------------------------------------  
  4. {"bar": "baz", "balance": 7.77, "active":false}  
  5. (1 row) 

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读