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/pgadmin4docker run -d -p 5433:80 --name pgadmin4 -e PGADMIN_DEFAULT_EMAIL=123@123.com -e PGADMIN_DEFAULT_PASSWORD=123456 dpage/pgadmin4

一些SQL写法-Demo参考

聚集-过滤

SELECTcount(*) 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    |  10Foo   | M    |  20Bar   | M    |  15Bar   | L    |  5
(4 rows)=> SELECT brand, size, sum(sales) FROM items_sold GROUP BY GROUPING SETS ((brand), (size), ());brand | size | sum
-------+------+-----Foo   |      |  30Bar   |      |  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 | one2 | two3 | three
(3 rows)

WITH单查询内辅助查询

WITH regional_sales AS (  # 有点像临时表的查询,预处理SELECT region, SUM(amount) AS total_salesFROM ordersGROUP BY region
), top_regions AS (SELECT regionFROM regional_salesWHERE 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


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java开源 VR全景商城 saas商城 b2b2c商城 o2o商城 积分商城 秒杀商城 拼团商城 分销商城 短视频商城 小程序商城搭建 bbc

​ 1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前…

回归预测 | MATLAB实现BES-SVM秃鹰搜索优化算法优化支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现BES-SVM秃鹰搜索优化算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现BES-SVM秃鹰搜索优化算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效…

python中的matplotlib画直方图(数据分析与可视化)

python中的matplotlib画直方图&#xff08;数据分析与可视化&#xff09; import numpy as np import pandas as pd import matplotlib.pyplot as pltpd.set_option("max_columns",None) plt.rcParams[font.sans-serif][SimHei] plt.rcParams[axes.unicode_minus]Fa…

centos8安装mysql

1.首先用finalShell远程连接到服务器 2.如果服务器之前安装过mysql请先卸载,我这里是用yum安装的&#xff0c;现在通过yum去卸载 yum remove -y mysql find / -name mysql //找到残留的文件&#xff0c;再通过rm -rf去删除对应的文件3.下面正式开始安装 &#xff08;1&#…

基于微信小程序+Springboot校园二手商城系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、目前专注于大学生项目实战开发,讲解,毕业答疑辅导✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3…

【PHP】数据类型运算符位运算

文章目录 数据类型简单&#xff08;基本&#xff09;数据类型&#xff1a;4个小类复合数据类型&#xff1a;2个小类特殊数据类型&#xff1a;2个小类类型转换类型判断整数类型浮点类型布尔类型 运算符赋值运算符算术运算符比较运算符逻辑运算符连接运算符错误抑制符三目运算符自…

Apache ShenYu 学习笔记一

1、简介 这是一个异步的&#xff0c;高性能的&#xff0c;跨语言的&#xff0c;响应式的 API 网关。 官网文档&#xff1a;Apache ShenYu 介绍 | Apache ShenYu仓库地址&#xff1a;GitHub - apache/shenyu: Apache ShenYu is a Java native API Gateway for service proxy, pr…

UE学习记录03----UE5.2 使用MVVM示例

1.打开ue5.2新建C项目 2.项目中通过类导向新建C类&#xff0c;父类选择为UMVVMViewModelBase&#xff0c;创建完成会自动打开vs 3.在VS中对新建的类进行宏定义 使用 C 类向导 创建的类声明自动通过 UCLASS() 宏进行处理。 UCLASS() 宏使得引擎意识到这个类的存在&#xff0c;并…

【Rust】Rust学习 第十九章高级特征

现在我们已经学习了 Rust 编程语言中最常用的部分。在第二十章开始另一个新项目之前&#xff0c;让我们聊聊一些总有一天你会遇上的部分内容。你可以将本章作为不经意间遇到未知的内容时的参考。本章将要学习的功能在一些非常特定的场景下很有用处。虽然很少会碰到它们&#xf…

上海交大ACM班总教头团队重磅新作,带你动手学机器学习(文末赠书4本)

目录 0 写在前面1 什么是机器学习&#xff1f;2 ACM 班总教头&#xff1a;俞勇3 动手学习机器学习赠书活动 0 写在前面 机器学习强基计划聚焦深度和广度&#xff0c;加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的数学原理&#xff1b;“广”在分析多个机器…

怎么制作sip网络寻呼话筒,sip任意呼叫主机,

怎么制作sip网络寻呼话筒&#xff0c;sip任意呼叫主机&#xff0c; 所需材料一&#xff1a;SV-2103VP sip网络音频模块 功能如下&#xff1a; SV-2101VP/ SV-2103VP使用了AT32F437VGT7处理器构架加专业的双向音频Codec编解码器&#xff0c; 处理器负责数据的传输&#xff0c…

chapter 3 Free electrons in solid - 3.2 量子自由电子理论对一些现象的解释

3.2 自由电子气的热容 Heat capacity of free electron gas 3.2.1 计算自由电子的热容 Calculation of Heat Capacity of free Electrons T>0K, total energy of free electrons: E ∫ E d N 3 5 N e E F 0 [ 1 5 12 π 2 ( k B T E F 0 ) 2 ] E \int EdN \frac{3}{5}…

最新APP下载官网源码带app预览,

适合做软件&#xff0c;游戏&#xff0c;产品&#xff0c;企业工作室官网&#xff0c;有能力的可自行二开。 源码&#xff1a;星域社区官网源码.zip - 蓝奏云

ARL资产侦察灯塔 指纹增强

项目&#xff1a;https://github.com/loecho-sec/ARL-Finger-ADD 下载项目后运行 python3 ARl-Finger-ADD.py https://你的vpsIP:5003/ admin password该项目中的finger.json可以自己找到其他的指纹完善&#xff0c;然后运行脚本添加指纹。

VM——获取图像中的圆环区域

、需求&#xff1a;下图是圆柱形铝罐&#xff0c;需要获取图像中的罐沿区域。 2、方法如下&#xff1a; (1)通过找外圆&#xff0c;提取圆形区域 &#xff08;2&#xff09;利用“拷贝填充”模块&#xff0c;绘制外圆ROI&#xff0c;选择“输出掩膜” &#xff08;3&#xff09…

【leetcode 力扣刷题】双指针//哈希表 解决链表有环等问题

双指针//哈希表 解决链表有环等问题 19. 删除链表的倒数第N个结点遍历两次&#xff0c;先求得链表长度&#xff0c;再删除双指针&#xff0c;只遍历一次 141. 环形链表 【判断链表是否有环】哈希表快慢双指针 142. 环形链表Ⅱ 【找环的入口】哈希表双指针求环中有多少个结点 面…

【广州华锐视点】AR配电所巡检系统:可视化巡检利器

随着科技的发展&#xff0c;人工智能、大数据等技术逐渐应用于各个领域&#xff0c;为人们的生活带来便利。在电力行业&#xff0c;AR(增强现实)技术的应用也日益广泛。AR配电所巡检系统作为一种新型的巡检方式&#xff0c;可以实现多种功能&#xff0c;提高巡检效率&#xff0…

webrtc学习(六)重要信令级时序图

一.四个重要信令 1.用户登录信令 SignIn 2..用户登出信令 SignOut 3..用户等待信令 wait信令是指从服务器的消息队列中获取暂存的中转消息&#xff0c;比如说sdp消息&#xff0c;对于信令服务器来说&#xff0c;他没有办法给用户推送消息&#xff0c;只能是用户推送消息给…

Halcon错误 #2021: System clock has been set back.

修复"Halcon#2021 System clock has been set back."一键即可解决。

JVM——类加载与字节码技术—字节码指令

2.字节码指令 2.1 入门 jvm的解释器可以识别平台无关的字节码指令&#xff0c;解释为机器码执行。 2a b7 00 01 b1 this . init&#xff08;&#xff09; return 准备了System.out对象&#xff0c;准备了参数“hello world”,准备了对象的方法println(String)V&#xff…