PG介绍
PostgreSQL是一个免费的对象-关系数据库
PG号称是“开源界的Oracle”
postgresql官网
PostgreSQL: The world's most advanced open source database
全球数据库排行榜
DB-Engines Ranking - popularity ranking of database management systems
国产数据库排行
很多都是基于PGSQL开发的,“信创”趋势
学习本课程的前置知识
- 会docker
- 会mysql
PG与Mysql的区别
相对于mysql的优势
- 在SQL实现上要比Mysql完善
- 对表连接支持较完整,支持索引类型很多,复杂查询能力较强
- PG主表采用堆表存放,Mysql采用索引组织表,能够支持比Mysql更大的数据量
- PG的主备复制属于物理复制,相当于Mysql的基于binlog的逻辑复制,数据的一致性更加可靠,复制性能更高
- 支持JSON和其他NoSQL功能
- 完全免费,如果你把PGSQL改一改,然后再拿去卖钱,也没有人管你,这一点很重要
安装
使用docker安装
docker pull postgres:12-alpine3.20
docker run --name pgsql --restart=always -d -p 5432:5432 -v /opt/pgsql/data:/var/lib/postgresql/data --shm-size=10g -e POSTGRES_USER=root -e POSTGRES_PASSWORD=mysecretpassword postgres:12-alpine3.20
docker run --name p1 --restart=always -d --shm-size=10g -e POSTGRES_PASSWORD=mysecretpassword postgres:12-alpine3.20
docker run --name p2 --restart=always -d --shm-size=10g -e POSTGRES_USER=root -e POSTGRES_PASSWORD=mysecretpassword postgres:12-alpine3.20
POSTGRES_USER
:设置 PostgreSQL 的超级用户名(默认为postgres
)。POSTGRES_PASSWORD
:设置 PostgreSQL 的超级用户密码。POSTGRES_DB
:设置默认数据库名(如果未设置,默认创建与用户同名的数据库)。
方便起见,可以进容器之后,创建用户postgres的用户,后面就会方便一点
docker exec -it pgsql bash
adduser postgres
su postgres
PGSQL的基本使用
本课程是建立在会了mysql之后
使用类比的方式去学习
登录 连接数据库,默认用户和数据库都是postgres
如果用postgres用户连接数据库,是不用输入密码的
psql -U user -d db_name -h 127.0.0.1 -p 5432
数据库操作
# 建库
create database db;
# 查看数据库列表
\l
# 切换数据库
\c
# 删除数据库 需要当前会话不在当前库
drop database db1;
# 在shell中直接建库
createdb -U postgres mydb
数据表的相关操作
PG支持的数据类型很多
# 建表
create table test(id serial primary key, name varchar(16) not null);
# 插入数据
insert into test(name) values('枫枫');
# 查记录
select * from test;
# 查看当前库下的所有表
\d
# 看表结构
\d test
Schema
在mysql中,Schema就是库
但是在pg中,Schema不太一样,可以理解为命名空间,在库的下面又套了一层
使用模式(Schema)的优势:
- 允许多个用户使用一个数据库并且不会互相干扰
- 命名空间
- 将数据库对象组织成逻辑组以便更容易管理
- 第三方应用的对象可以放在独立的模式中,这样他们就不会与其他对象的名称发生冲突
# 创建模式
CREATE SCHEMA schema_name;
# 创建表到指定模式
CREATE TABLE schema_name.table_name (
column_name data_type
);
# 切换模式
SET search_path TO schema_name;
# 查看模式列表
\dn;
# 删除模式
DROP SCHEMA schema_name CASCADE;
备份数据库
# 导出数据
pq_dump -U postgres db_name > dbname.sql
# 恢复数据 需要先创建数据库
psql -f xx.sql -U postgres db
用户操作
# 创建用户并设置密码
create user u1 password 'pwd';
# 创建一个创建用户
create user u2 superuser password 'pwd';
# 创建一个可以建库的用户
create user u3 createdb password 'pwd';
# 查看用户列表
\du
# 赋予权限 赋予 用户对 xx 数据库中 public 模式的所有权限:
GRANT ALL PRIVILEGES ON DATABASE db_name TO username;
# 取消权限
REVOKE ALL PRIVILEGES ON DATABASE db_name FROM username;
# 删除用户
DROP USER username;
数据类型
json和jsonb
参考文档
schema使用 PostgreSQL基本使用(3)Schema_postgresql schema-优快云博客
PostgreSQL 中的模式是什么 PostgreSQL 中的模式是什么_pg数据库默认模式是啥-优快云博客
给pgsql添加用户 给PGSQL添加用户_pgsql 创建用户-优快云博客
pgsql删除用户 【PostgreSQL】入门篇——如何创建、删除和管理数据库及其用户,包括权限设置和角色管理_postgresql 创建数据库-优快云博客
pgsql基本数据类型 PostgreSQL数据类型及基本操作_pgsql数据类型-优快云博客