PostgreSQL数据库总结
形而上 Lv5

PG简介

posgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS)。

BSD许可证。(可以基于开源版本二次开发,可以不开源使用。 mysql的GPL是二开之后必须也开源)

postgreSQL 的 Slogan 是: “世界上最先进的开源关系型数据库”。

“开源界的Oracle”, 是去O(oracle)的首选.

mysql 已经被oracle收购了。

官网:https://www.postgresql.org/

中文社区: http://www.postgres.cn/index.php/v2/home

全球数据库排行: https://db-engines.com/en/

中国数据库排行: https://www.modb.pro/dbRank
部分是基于pg二开的。

历史沿革

最初设想于1986年, 当时被叫做Berkley Postgres Project。教学用。

Postgre95在开源社区开放。

1996年, postgresSQL6.0发布。

2005年,发布8.0版本,开始支持windows系统环境。

postgreSQL 9.0 发布, 支持64位windows系统,异步流数据复制, HostStandby;
postgreSQL 9.1 发布, 支持数据同步复制,等特性

目前笔者的生产环境版本是

PostgreSQL 15.6 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit

pg和mysql的比较

pg相对于mysql优势

  1. 在SQL的标准实现上要比MYSQL完善,而且功能实现比较严谨。

  2. 对表连接支持较完整,优化器功能较完整,支持的索引类型多,复杂查询能力强。

  3. pg主表采用堆表存放,mysql采用索引组织表,能够支持比mysql更大的数据量。

  4. pg的主备复制属于物理复制,相对于mysql基于binlog的逻辑复制,数据的一致性更加可靠,复制性能更高,对主机性能影响更小。

  5. pg支持json和其他noSQL功能,如本机xml支持和使用hstore的键值对,它还支持索引json数据加快访问速度,特别是10版本jsonb更是强大。

  6. pg完全免费,bsd协议,如果你把pg拿去改一改,拿去卖钱也没人管你。 mysql虽然开源,但是bsd协议已经被oracle收购了,由oracle控制

mysql相对于pg优势

  1. innodb 是基于回滚段实现的mvcc机制,相对pg新老数据一起存放的基于xid的mvcc机制是占优势的,新老数据一起存放需要定时触发 vacuum, 会带来多余的io和数据库加锁开销,引起数据库整体并发能力下降。而且vacuum清理不及时,还可能英法数据膨胀。

  2. mysql采用索引组织表,这种存储方式非常适合基于主键匹配的查询,删改操作,但是对表结构设计存在约束。

  3. mysql的优化器比较简单,系统表,运算符,数据类型实现比较精简,非常适合简单的查询操作。

  4. mysql相对于pg在国内流行度更高。

  5. mysql的存储引擎插件化机制,是的它的应用更加广泛,比如除了innodb适合事务处理场景外,myisam适合静态数据查询场景。

总结来说

从应用场景上,pg更加适合严格的企业应用场景,比如金融,电信,ERP, CRM,但不仅限于此,pg的json, jsonb, hstore等数据格式,特别使用一些大数据格式的分析; 而mysql更加适合业务逻辑比较简单,数据可靠性要求较低的场景,比如google, facebook, alibaba等。当然现在mysql的innodb引擎大理发展,功能表现良好。

pg下载安装

linux安装,参考官网,这里重点在于学习使用,所以这里不详细介绍。
docker安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
docker pull postgres:14

# 创建映射目录
mkdir postgresql/data

# 启动容器
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=123456 --name postgres postgres:14

docker run -d -p 5432:5432 -v $(pwd)/postgresql/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 --name postgres postgres:14

# 修改配置文件/data/postgresql/data/postgresql.conf
# 设置时区
timezone = 'Asia/Shanghai'
# 连接数
max_connections = 1000

使用dbeaver可以连接:

进去docker连接:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
psql -U postgres -d postgres -h 127.0.0.1 -p 5432

##退出
postgres=# \q

## 创建库
postgres=# create database mydb;
CREATE DATABASE

## 切换数据库
postgres=# \c mydb
You are now connected to database "mydb" as user "postgres".

## 删除drop


pg数据类型

三类常见的:

  • 数值类型
    smallint 2字节 -32768 到 32767
    integer 4字节 -2147483648 到 2147483647
    bigint 8字节 -9223372036854775808 到 9223372036854775807
    decimal 可变长 精确的十进制数值
    numeric 可变长 精确的十进制数值
    real 4字节 单精度浮点数
    double 8字节 双精度浮点数

  • 字符串类型
    char(n) 固定长度字符串,n为字符串长度
    varchar(n) 可变长度字符串,n为字符串长度
    text 变长字符串

  • 日期/时间类型
    timestamp 日期和时间
    date 日期
    time 时间

除此之外还有boolean, money 和几何数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
create table test(
id serial primary key,
name varchar(100),
age int,
created_at timestamp
);

insert into test(name, age, created_at) values
('jack', 18, now()), ('marry', 19, now()), ('tom', 20, now());

-- 创建schema
create schema myschema;

-- 备份
pg_dump mydb > mydb.bak

  • 本文标题:PostgreSQL数据库总结
  • 本文作者:形而上
  • 创建时间:2024-06-08 18:19:40
  • 本文链接:https://deepter.gitee.io/2024_06_08_pg/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!