PostgreSQL-研究学习-介绍与安装

PostgreSQL-预研

是个很厉害的数据库的样子 ψ(*`ー´)ψ

官方文档:http://www.postgres.cn/docs/12/


总的结论和备注

PgSQL 支持对JSON的支持很强大,以及提供了很多数学几何相关的数据类型【例:点,线条,几何等】

基本语法其实和MySQL差不多,具体的就要在使用的时候去适应和学习了!!!

概述

PostgreSQL数据库是目前功能最强大的开源数据库,支持丰富的数据类型(如JSON和JSONB类型、数组类型)和自定义类型。而且它提供了丰富的接口,可以很容易地扩展它的功能,如可以在GiST框架下实现自己的索引类型等,它还支持使用C语言写自定义函数、触发器,也支持使用流行的语言写自定义函数,比如其中的PL/Perl提供了使用Perl语言写自定义函数的功能,当然还有PL/Python、PL/Tcl,等等。

PostgreSQL是为特性非常齐全的对象-关系型数据库,同时还支持NoSql的文档型存储。

PostgreSQL 对比MySQL

一、事务隔离之间的比较

事务隔离级别postgresqlmysql
读未提交无法读脏数据
读已提交快照实现快照实现
可重复读有,无幻读,发生冲突时,牺牲其中一个事务已实现,有幻读,悲观锁,因为Gap Lock问题,存在性能问题
可串行化已实现,通过SSI实现,乐观锁,性能比较好悲观锁,S2PL,性能不好,实用性比较差

二、持久化之间的比较

持久化技术postgresqlmysql
事务的持久化WAL日志binlog和innodb的redo log
页断裂问题full_page_writesdouble write
检查块的一致性checksumchecksum,db_lock_checking
事务同步提交默认是同步synchronous_commit=on,session级别可以设置,更灵活sync_binlog=1,innodb_flush_log_at_trx_commit=1全局参数

三、复制之间的比较

postgresqlmysql
支持物理复制和逻辑复制仅支持逻辑复制
物理复制延迟小逻辑复制延时大
大更新对复制延迟影响小大更新对复制延迟的影响很大,很容易导致复制延迟
物理复制主备之间数据绝对一致逻辑复制可能出现准备数据不一致情况
支持一主多从,支持联级复制,不支持双主架构支持一主多从,支持联级复制,支持双主架构

四、查询相关功能的比较

postgresqlmysql
成熟的基于代价的SQL优化器,复杂SQL性能很好查询优化器不够成熟,非完全的基于代价的SQL优化器,对复杂查询的性能较低
多种表连接类型:nested-loop join,sort-merge join,hash join一种表连接类型:nested-loop
非常智能,可以走多个索引大部分查询只能使用表上得单一索引;在某些情况下,会存在使用多个索引的查询,但是查询优化器通常会低估其成本,它们常常比表扫描还有慢
pg11版本之前表增加列基本上是重建表和索引,消耗时间比较长,pg11之后对非空列添加不需要重建表增加列,只是在数据字典中增表定义,不会重建表
支持在线创建索引,pg10开始支持并行创建索引支持在线创建索引,不支持并发索引
支持并行查询mysql8.0之前不支持并行查询
支持B-树,哈希,R-树和Gist索引B-树,哈希(不同存储引擎)

五、表功能之间的比较

postgresqlmysql
除了支持pl/pgsql写存储过程,还支持pl/perl,pl/python,pl/tcl;也支持用C语言的写存储过程存储过程与触发器功能有限
有单独的sequence没有单独的sequence,sequence在表主键上
PostGIS插件支持,PostGIS是目前使用最广泛地开源GIS系统GIS的支持有限
通过GIN索引提供了对JSON内部数据的索引,只要创建索引之后,不管存储json的数据格式如何变化,都能利用GIN索引加快查询json类型只支持虚拟列方式创建索引,不支持json内部数据的索引,当json内部的列结构不确定时,不能事先创建索引来提高查询性能
通过FDW框架完善支持外部表功能,可以方便连接其他异构数据源,如mysql,mongodb等外部表功能有限,基本不具有太多实用价值
堆表,不支持索引组织表索引组织表,不支持堆表
ddl可以回滚,支持原子性DDLDDL不支持回滚,mysql8.0之前多个ddl不能原子执行
支持窗口函数mysql8.0之前不支持窗口函数

六、视图和安全之间的比较

postgresqlmysql
支持物化视图不支持物化视图
支持临时表支持临时表
支持主键,外键,唯一键,检查,非约束,还支持exclusion constraints支持主键,外键,唯一键,检查,非约束
支持两阶段提交支持两阶段提交
认证方式丰富,信任/口令/PAM/LDAP/Kerberos/基于ident基本支持密码认证
可以使用pgcrypto库中的函数对列进行加密/解密;可以通过ssl连接实现网络加密可以在表级制定密码来对数据进行加密;可以使用aes_encrypt和aes_decrypt函数对列数据进行加密和解密;可以通过ssl连接实现网络加密
使用explain命令查看查询的解释计划,结果很直观,也很详细使用explain命令查看查询解释计划,但结果不直观,不详细
postgresql完成遵从ACIDmysql只有innodb等少量存储引擎遵从ACID

安装教程【CentOS7 - 14版本】

# 官方https://www.postgresql.org/download/linux/redhat/
# Install the repository RPM:
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# Install PostgreSQL:
sudo yum install -y postgresql14-server

# Optionally initialize the database and enable automatic start:
sudo /usr/pgsql-14/bin/postgresql-14-setup initdb
sudo systemctl enable postgresql-14
sudo systemctl start postgresql-14

# ================================================================
### 其他操作
# =============================================
## 自定义数据存储目录【1】
# 创建目录
mkdir -p /usr/local/postgresql/data
# 授权, postgres用户与组在第2步会自动创建好
chown -R postgres:postgres /usr/local/postgresql
# =============================
# 初始化数据库【2】
su - postgres
# 使用自定义数据存储目录【选一个】
/usr/pgsql-14/bin/initdb -D /usr/local/postgresql/data/
# 使用默认数据存储目录【选一个】
/usr/pgsql-14/bin/initdb
# =============================
## 修改启动脚本【3】
# 使用root用户
vim /usr/lib/systemd/system/postgresql-14.service
......
# Location of database directory
Environment=PGDATA=/usr/local/postgresql/data/
......
# 重新加载系统服务
systemctl daemon-reload
# =============================
## 设置监听地址【4】
# 使用postgres用户
vim /usr/local/postgresql/data/postgresql.conf
......
# - Connection Settings -
listen_addresses = '*'                  # what IP address(es) to listen on;
......
# =============================
# 新增密码认证【5】
vim /usr/local/postgresql/data/pg_hba.conf
......
。。。。。
host    replication     all             ::1/128                 trust
# 添加可通过密码对所有用户和主机进行认证【就下面这一行】
host    all             all             0.0.0.0/0               trust  
# =============================# =============================
## 修改postgres超级用户密码【6】
# 使用postgres用户
psql -p 5432 -U postgres
ALTER USER postgres WITH PASSWORD '123456';
# ============================= 完成  =============================
# docker 方案【未尝试】
docker run -d -p 5432:5432 --name postgresql -v pgdata:/var/lib/postgresql/data -e  POSTGRES_PASSWORD=123321 postgres

安装pgAdmin4-web服务

官网:https://www.pgadmin.org/
官方安装教程:https://www.pgadmin.org/download/pgadmin-4-rpm/

安装好了之后的截面图:
效果界面

安装教程:(如下)

rpm -ivh https://ftp.postgresql.org/pub/pgadmin/pgadmin4/yum/pgadmin4-redhat-repo-2-1.noarch.rpm --force --nodeps
sudo yum install pgadmin4-web

# 设置 selinux  这个需要重启
vim /etc/selinux/config
SELINUX=disable
# 设置 selinux  临时不用重启
setenforce 0

# 修改端口
vim /etc/httpd/conf.d/pgadmin4.conf
<VirtualHost *:80>
ServerName pgadmin.cn
# 自带内容
</VirtualHost>

# 执行
/usr/pgadmin4/bin/setup-web.sh

# 完成:后续按提示初始化就可以里  
# docker方案【未尝试】
docker pull dpage/pgadmin4

docker run -d -p 5433:80 --name pgadmin4 -e PGADMIN_DEFAULT_EMAIL=123@123.com -e PGADMIN_DEFAULT_PASSWORD=123456 dpage/pgadmin4

一些SQL写法-Demo参考

聚集-过滤

SELECT
    count(*) AS unfiltered,
    count(*) FILTER (WHERE i < 5) AS filtered   # 这里的过滤
FROM generate_series(1,10) AS s(i);
 unfiltered | filtered
------------+----------
         10 |        4

高级分组统计

CUBEROLLUP 更高级的排列

=> SELECT * FROM items_sold;
 brand | size | sales
-------+------+-------
 Foo   | L    |  10
 Foo   | M    |  20
 Bar   | M    |  15
 Bar   | L    |  5
(4 rows)

=> SELECT brand, size, sum(sales) FROM items_sold GROUP BY GROUPING SETS ((brand), (size), ());
 brand | size | sum
-------+------+-----
 Foo   |      |  30
 Bar   |      |  20
       | L    |  15
       | M    |  35
       |      |  50
(5 rows)

手动构建临时Table

=> SELECT * FROM (VALUES (1, 'one'), (2, 'two'), (3, 'three')) AS t (num,letter);
 num | letter
-----+--------
   1 | one
   2 | two
   3 | three
(3 rows)

WITH单查询内辅助查询

WITH regional_sales AS (  # 有点像临时表的查询,预处理
    SELECT region, SUM(amount) AS total_sales
    FROM orders
    GROUP BY region
), top_regions AS (
    SELECT region
    FROM regional_sales
    WHERE total_sales > (SELECT SUM(total_sales)/10 FROM regional_sales)
)
SELECT region,
       product,
       SUM(quantity) AS product_units,
       SUM(amount) AS product_sales
FROM orders
WHERE region IN (SELECT region FROM top_regions)
GROUP BY region, product;

中文全文检索

全文索引的实现要靠 PgSQL 的 gin 索引。分词功能 PgSQL 内置了英文、西班牙文等,但中文分词需要借助开源插件 zhparser

参考文档:https://www.cnblogs.com/zhenbianshu/p/7795247.html


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/87186.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

亿级短视频,如何架构?

说在前面 在尼恩的&#xff08;50&#xff09;读者社群中&#xff0c;经常指导大家面试架构&#xff0c;拿高端offer。 前几天&#xff0c;指导一个年薪100W小伙伴&#xff0c;拿到字节面试邀请。 遇到一个 非常、非常高频的一个面试题&#xff0c;但是很不好回答&#xff0…

【Java 高阶】一文精通 Spring MVC - 转换器(五)

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…

table,设置 数据相同时, 合并列

<el-table :data"tableData" :span-method"objectSpanMethod" border style"width: 100%" show-summary><el-table-column type"index" label"序号" width"100" /><el-table-column prop"dat…

红日靶场(一)vulnstack1 渗透过程分析

文章目录 环境搭建信息收集PhpMyAdmin 后台 Getshellinto outfileMysql日志文件写入shell CS后渗透MSF后渗透知识补充nmap参数分类参数速查表 dirsearch 环境搭建 ip段设置 kali (coleak)&#xff1a;192.168.145.139 Windows 7 (stu1)&#xff1a;192.168.10.181、192.168.1…

Java后端:html转pdf实战笔记

1、htmltopdf有什么用? htmltopdf 是一款基于wkhtmltopdf技术的html转pdf文档java类库,支持html转pdf和url转pdf。 2、什么是wkhtmltopdf wkhtmltopdf是一个用webkit网页渲染引擎开发的用来将html转成 pdf的工具,可跟多种脚本语言进行集成来转换文档,有windows、linux等平…

云南森林火灾vr消防模拟安全演练系统训练消防员火灾和事故的适应和应对能力

据统计,每一场破坏性地震发生后,会引发次生的灾害,而火灾是其中之一。导致火灾的原因,推测是地震时使供电线路短路,引燃易燃物,火灾就随即发生。所以,在日常生活中,定期的消防演练还是非常必要的, VR消防&#xff0c;是VR公司深圳华锐视点利用VR虚拟现实技术&#xff0c;将VR和…

发力服务业务,龙湖集团半程领跑赢在“智慧”

成立三十载&#xff0c;龙湖集团一直是房地产行业“特立独行”的存在。 一方面&#xff0c;龙湖在对外战略方面长期量入为出&#xff0c;从不背上过重的“包袱”。 不久前&#xff0c;一则消息引发市场关注&#xff1a;龙湖集团提前偿还17亿元债务&#xff0c;已基本全部还清…

2023年国赛 高教社杯数学建模思路 - 案例:粒子群算法

文章目录 1 什么是粒子群算法&#xff1f;2 举个例子3 还是一个例子算法流程算法实现建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 什么是粒子群算法&#xff1f; 粒子群算法&#xff08;Pa…

GMS基本模块TIN、Solids、Modflow2000/2005、MT3DMS、MODPATH。及其在地下水流动、溶质运移、粒子追踪方面的应用

解决地下水数值模拟技术实施过程中遇到的困难&#xff0c;从而提出切实可行的环境保护措施&#xff0c;达到有效保护环境、防治地下水污染&#xff0c;推动经济社会可持续发展的目的。 &#xff08;1&#xff09;水文地质学&#xff0c;地下水数值模拟基础理论&#xff1b;&am…

鸿鹄工程项目管理系统 Spring Cloud+Spring Boot+前后端分离构建工程项目管理系统 em

工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#xff…

GCC编译器优化等级的选择

GCC编译器通常提供多个优化级别供选择&#xff0c;每个级别对代码进行不同程度的优化。以下是GCC编译器常见的优化级别&#xff1a; 无优化&#xff08;-O0&#xff09;&#xff1a;这是默认的优化级别&#xff0c;编译器不执行任何优化。适用于调试目的或要求最小编译时间的情…

【LeetCode】模拟实现FILE以及认识缓冲区

模拟实现FILE以及认识缓冲区 刷新缓冲逻辑图自定义实现如何强制刷新内核缓冲区例子 刷新缓冲逻辑图 自定义实现 mystdio.h #pragma once #include <stdio.h>#define NUM 1024 #define BUFF_NOME 0x1 #define BUFF_LINE 0x2 #define BUFF_ALL 0x4typedef struct _MY_FIL…

ChatGPT-4: 半年的深度使用思考

几个月的时间一直在使用 ChatGpt-4&#xff0c;以口述语音转文字的形式说一下自己的体会。 1、选择版本 大前提&#xff1a;我使用的都是 GPT4 的版本。也就是说至少每个月要付费20$。 因为 3.5 的版本&#xff0c;实际上使用体验是非常差的&#xff0c;主要体现在答非所问上。…

c++ 命名空间

1. 基本概念  1.1 定义与使用  1.2 using语句2. 进阶语法  2.1 内嵌名字空间  2.2 扩展性  2.3 全局作用域3. 小结 1. 基本概念 名字空间本质上是自定义作用域&#xff0c;由于C设计的初衷是开发大规模软件&#xff0c;大量的软件库必然会加剧全局符号&#xff08;变量、…

Word中对象方法(Methods)的理解及示例(上)

【分享成果&#xff0c;随喜正能量】奋斗没有终点,任何时候都是一个起点&#xff0c;沉潜是为了蓄势待发&#xff0c;沉潜是为了等待因缘。鲸豚沉潜于大海&#xff0c;幽兰深藏于山谷&#xff0c;能够经得起沉潜的人&#xff0c;才会有更高的成就。正如一年的树木只能当柴烧&am…

PPPoE vs 静态:网络中的最佳选择

在企业网络中&#xff0c;选择适合的网络连接方式对于网络性能和安全至关重要。今天我将和大家分享关于PPPoE和静态IP地址的知识&#xff0c;探讨它们在企业网络中的优劣和最佳选择。本文将为您提供详细的分析和解决方案&#xff0c;帮助您在选择网络连接方式时做出明智的决策。…

Jmeter常用线程组设置策略

一、前言 ​ 在JMeter压力测试中&#xff0c;我们时常见到的几个场景有&#xff1a;单场景基准测试、单场景并发测试、单场景容量测试、混合场景容量测试、混合场景并发测试以及混合场景稳定性测试 在本篇文章中&#xff0c;我们会用到一些插件&#xff0c;在这边先给大家列出&…

小兔鲜儿 - 推荐模块

目录 动态获取数据 静态结构 获取页面参数​ 获取数据​ 类型声明 热门推荐 – 渲染页面和Tab交互 热门推荐 – 分页加载 热门推荐 – 分页条件 type 和 interface 的区别 type 和 interface 的相似之处 type 的特点和用途 interface 的特点和用途 何时使用 type…

数据结构:直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序,计数排序(C实现)

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》 文章目录 前言一、插入排序1.直接插入排序2.希尔排序 二、选择排序1. 选择排序2.堆排序 三、交换排序1.冒泡排序2.快速排序(递归)a.hoare版(PartSort1)b.挖坑法(PartSort2)c.前后指针法(PartSort…

【云驻共创】华为云之手把手教你搭建IoT物联网应用充电桩实时监控大屏

文章目录 前言1.什么是充电桩2.什么是IOT3.什么是端、边、云、应用协同4.什么是Astro轻应用 一、玩转lOT动态实时大屏&#xff08;线下实际操作&#xff09;1.Astro轻应用说明1.1 场景说明1.2 资费说明1.3 整体流程 2.操作步骤2.1 开通设备接入服务2.2 创建产品2.3 注册设备2.4…