学习使用pgsql(postgresql)

前言

PostgreSQL 的历史简介编辑 播报
现在被称为 PostgreSQL 的对象-关系型数据库管理系统(有一段时间被称为 Postgres95)是从伯克利写的 POSTGRES 软件包发展而来的。经过十几年的发展, PostgreSQL 是世界上可以获得的最先进的开放源码的数据库系统, 它提供了多版本并行控制,支持几乎所有 SQL 构件(包括子查询,事务和用户定义类型和函数), 并且可以获得非常广阔范围的(开发)语言绑定(包括 C,C++,Java,perl,tcl,和 python)。


二、安装步骤

1.用docker安装简单快捷

拉取镜像
docker pull postgres
查看下载的镜像
docker images
运行镜像
docker run --name pgsql -d -p 5432:5432 -e POSTGRES_PASSWORD=123456 07e2ee723e2d
-e是设置密码
默认账号是
postgres 密码 你刚刚设置的123456
也可以新建用户
docker exec -it 容器id /bin/bash
切换用户root->postgres
su - postgres
进入数据库
psql
CREATE USER 用户名 WITH PASSWORD ‘密码’;
alter role jiraadmin with superuser; 将用户赋予超级管理员权限
密码必须要双引号 结束必须要分号要不是无法结束语句

创建数据库
CREATE DATABASE 数据名称 OWNER 用户;
1
退出
\q
1
重新用navicat可以重新连接
然后去navicat登录会发现没有权限authentication method 10 not supported
去docker的容器找到pgsql的容器,然后修改 pg_hba.conf文件,用xftp去修改比较好
在host哪里加一列
host all all 0.0.0.0/0 password
然后修改
postgresql.conf 把端口打开
listen_addresses = ‘*’
把端口开放,原来是 注释的
port = 5432
然后保存,后重启镜像
docker restart 07e2ee723e2d
就可以连接成功了
创建新数据库的时候,会 报错
source database “template1” is being accessed by other users DE,要进入容器去设置数据库拥有者
其他的语法就看文档了
—PostgreSQL两种分页方法查询

第一种

SELECT * FROM test WHERE i_id>1000 limit 100;

第二种

SELECT * FROM test limit 100 OFFSET 1000;

在3000W数据的时候,建议使用第一种.

mysql 的分页就非常简单了

SELECT * FROM test_table limit 100, 10;
mysql不支持ACID
pgsql支持ACID
两种都是开源的

三.PostgreSQL相对于MySQL的优势
1、在SQL的标准实现上要比MySQL完善,而且功能实现比较严谨;
2、存储过程的功能支持要比MySQL好,具备本地缓存执行计划的能力;
3、对表连接支持较完整,优化器的功能较完整,支持的索引类型很多,复杂查询能力较强;
4、PG主表采用堆表存放,MySQL采用索引组织表,能够支持比MySQL更大的数据量。
5、PG的主备复制属于物理复制,相对于MySQL基于binlog的逻辑复制,数据的一致性更加可靠,复制性能更高,对主机性能的影响也更小。
6、MySQL的存储引擎插件化机制,存在锁机制复杂影响并发的问题,而PG不存在。

四、MySQL相对于PG的优势:
1、innodb的基于回滚段实现的MVCC机制,相对PG新老数据一起存放的基于XID的MVCC机制,是占优的。新老数据一起存放,需要定时触 发VACUUM,会带来多余的IO和数据库对象加锁开销,引起数据库整体的并发能力下降。而且VACUUM清理不及时,还可能会引发数据膨胀;
2、MySQL采用索引组织表,这种存储方式非常适合基于主键匹配的查询、删改操作,但是对表结构设计存在约束;
3、MySQL的优化器较简单,系统表、运算符、数据类型的实现都很精简,非常适合简单的查询操作;
4、MySQL分区表的实现要优于PG的基于继承表的分区实现,主要体现在分区个数达到上千上万后的处理性能差异较大。
5、MySQL的存储引擎插件化机制,使得它的应用场景更加广泛,比如除了innodb适合事务处理场景外,myisam适合静态数据的查询场景

总结

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pgsql的安装,又一种关系型数据库,学无止境,不仅仅于mysql