PostgreSQL 初探「建议收藏」

PostgreSQL 初探「建议收藏」PostgreSQL 是我们经常选择的数据库之一。它不仅仅是关系型数据库,同时也添加了对JSON数据的支持、全文检索功能,以及其他扩展。 2020 年 2月的总排名为第四名,关系型数据库中排名第四名…

PostgreSQL 初探

2020 年 2月的总排名为第四名,关系型数据库中排名第四名。排名信息参考:DB-Engines

PostgreSQL 初探「建议收藏」

PostgreSQL 初探「建议收藏」

为了更好地应用的工作中,针对 PostgreSQL 给我造成的疑惑整理了如下内容:

(1) PostgreSQL 版本之间的主要区别

(2) PostgreSQL 支持的数据类型

(3) PostgreSQL 存储引擎Heap介绍

(4) 围绕 JSON/JSONB 的全文检索功能以及 12.x 中的 JSON/JSONB Path

1, PostgreSQL 版本之间的主要区别

2020 年 2 月当我们访问 PostgreSQL 官网的时候,通过看到多个 Release 版本,应该怎么选择呢?

PostgreSQL 初探「建议收藏」

PostgreSQL 9.x 版本在 2020 年 2 月的版本是计划中的左右一个 release 版本,所以翻阅了 PostgreSQL 的相关文档后,整理了从 10.X,11.X,12.X 这三个版本的信息。如下图:

PostgreSQL 初探「建议收藏」

通过上面的版本我们发现,给开发人员带来的变化不大,这里列出了 4 项,开发人员经常关注的技术点:

(1)当前支持的数据类型

(2)存储引擎 Heap 具体的特性

(3)围绕 JSON/JSONB 的全文检索功能以及 12.x 中的 JSON/JSONB Path

所以下文将主要研究上面是 4 个技术点。

这里使用了一个 12.2 版本的 PostgreSQL 的 Docker 镜像:

docker pull postgre:12.2

代码100分

如果对其他版本感兴趣可以访问Docker hub

启动 Postgre

代码100分docker run -e POSTGRES_PASSWORD=123456 -p 5432:5432 --name potgre12 postgres:12.2

其中的 -e POSTGRES_PASSWORD=123456 是设置 superuser 用户的密码,superuser 的默认 username 是 postgres.

PS:如果不想通过密码访问也可以通过 POSTGRES_HOST_AUTH_METHOD=trust 来允许不需要密码访问。

安装 psql 客户端(如果你还是用其他客户端可以跳过该步骤)

brew install libpq

连接 postgreSQL

代码100分psql -h 127.0.0.1 -p 5432 -U postgres --passsword

2,PostgreSQL 支持数据类型

PostgreSQL 中支持多种数据类型。如下图

PostgreSQL 初探「建议收藏」

3,PostgreSQL 存储引擎 Heap 具体特性

PostgreSQL 的存储引擎 Heap 和 MySQL 的 InnoDB 都完全遵循ACID,使用的是行级锁。

4,围绕 JSON/JSONB 的全文检索功能以及 12.x 中的 JSON/JSONB Path

JSON 和 JSONB 的区别在于:

(1) JSON 类型以 JSON 格式存储文本数据,在查询的时候需要先做内容解析,然后进行查询。所以写入快、查询慢。

(2)JSONB 类型以 JSON 格式的二进制形式存储数据,在插入的时候需要做文本解析,查询的时候并不需要做解析,因此写入慢,查询快。

而对 JSON/JSONB 涉及到内容包括,下面的内容对对一条数据的一个简单例子:建表、新建数据、查询、模糊查询、数据更新。

(1)建表

create table boy (
    id int primary key not null, 
    name char(30) not null, 
    information jsonb
);

(2)新建数据

insert into boy (id, name, information) values (1,"Page", "{"age":18}");
insert into boy (id, name, information) values (2,"Aaron", "{"age":18}");
insert into boy (id, name, information) values (3,"Join", "{"age":18, "address":"beijing dongchengqu"}");

(3)查询

# 从 9.4 版本只是的通过 操作符 来查询 age 等于 18 的 student

select * from boy where (information->>"age")::int=18;


# 从 9.4 版本只是的通过 操作符 来查询 address 中以 beijing 开头的 students

select * from boy where (information->>"address")::text like "beijing%";


# 12.x版本支持的 JSON/JSONB Path 方式查询 age 等于 18 的 student

select jsonb_path_query(information, "$.age ? (@==18)") from boy;


# 12.x版本支持的 JSON/JSONB Path 方式查询 address 中以 beijing 开头的 students

select jsonb_path_query(information, "$.address ? (@ starts with "beijing")") from boy;

通过上面的代码不难发现,PostgreSQL 12 中提供的 JSON function 非常好用。更多查询语句可以参考: 官网 json functions

(4)模糊查询(全文检索)

经过尝试默认条件下 PostgreSQL 提供的分词器对中文分词并不好。所以下面将演示英文的全文检索

新建表

create table technical (
   id int primary key not null,
   name tsvector
);

其中 tsvector 的数据类型是是分词器类型。可以执行 select "hello page"::tsvector;来查看分词结果。

插入数据


insert into technical (id, name) values (1, "Test Driven Development"), (2, "Test Driven Design"), (3, "Behave Driven Development");

当搜索关键词 Test和Driven 时应该是显示 2 条结果;

select * from technical where name@@"Test & Driven";

总结:

通过上面的几个特性的分析,不难发现 PostgreSQL 提供了强大的功能和函数,上手之前还是需要对其中的函数有个大致的了解。

参考

(1) PostgreSQL 中文网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/9839.html

(0)
上一篇 2023-01-31 13:00
下一篇 2023-01-31

相关推荐

  • Python编码解码神器——Base64

    Python编码解码神器——Base64在计算机科学中,Base64是一种将任意二进制数据编码成ASCII字符的编码标准,常用于在HTTP协议等场景中传输较长的标识信息。在Python中,可以轻松实现Base64编码和解码,让你的数据变得更加安全和易于传输。

    2024-06-20
    44
  • oracle 连接数不够解决[通俗易懂]

    oracle 连接数不够解决[通俗易懂]程序报错: java.sql.SQLException: Listener refused the connection with the following error: ORA-12519, T…

    2022-12-23
    152
  • pgpool2_javapoi详细教程

    pgpool2_javapoi详细教程欢迎阅读 pgpool-II 入门教程。从本教程中,你将学会如何安装,设置 pgpool-II 以及使用 pgpool-II 运行并行查询和复制。我们假设你已经知道PostgreSQL的基础操作,所以

    2023-04-27
    135
  • 数据库锁表及解锁_mysql锁表与解锁

    数据库锁表及解锁_mysql锁表与解锁查看PostgreSQL锁表信息 一、查询PG_STAT_ACTIVITY的信息 SELECT * FROM pg_stat_activity where datname='bms'

    2023-05-17
    149
  • 免费Python在线面试练习测试

    免费Python在线面试练习测试
    Python作为一种高级编程语言,现已成为众多企业和开源社区的首选语言。在以信息技术为核心的现代化社会中,Python的广泛应用正在为许多行业和领域带来新的变革和机遇。同时,竞争也在不断升级。众多有才华的程序员以及培训机构涌现出来,使得就业市场变得异常激烈。企业和个人想要脱颖而出,全方位的技能和经验都非常重要。

    2023-12-13
    110
  • Django-ORM

    Django-ORM一、ORM介绍 ORM是(对象-关系-映射)的简称:它实现了数据模型与数据库的解耦,对于数据库的操作,就不用去写原生的 SQL 语句,取而代之的是基于面向对象的思想去编写类、对象、调用相应的方法等,O

    2023-04-17
    159
  • jmeter连接数据库并使用「建议收藏」

    jmeter连接数据库并使用「建议收藏」
    1、添加Mysql jdbc驱动包 1)下载驱动包 2)测试计划里面添加驱动包到classpath 2、添加JDBC Connection Configur…

    2023-04-04
    163
  • Linux安装MySQL – shang[通俗易懂]

    Linux安装MySQL – shang[通俗易懂]#Linux 安装Mysql 安装Linux 安装Linux 下载Mysql 点击[下载]((https://downloads.mysql.com/archives/community/)跳转到My

    2023-06-17
    147

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注