PostgreSQL
[toc]
1. 安装
1.1. linux 命令行安装
|
|
linux 服务管理命令 service
|
|
1.2. 使用 docker-compose
|
|
|
|
postgresql.conf
配置文件
|
|
日志方案 1 每天新生成一个文件
1 2 3 4
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' log_truncate_on_rotation = on log_rotation_age = 1d # 循环 log_rotation_size = 0
日志方案 2 写满一定大小, 如 10m 则切换日志
1 2 3 4
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' log_truncate_on_rotation = off log_rotation_age = 0 log_rotation_size = 10M
日志方案 3 保留 7 天日志, 循环覆盖
1 2 3 4
log_filename = 'postgresql-%a.log' log_truncate_on_rotation = on log_rotation_age = 1d log_rotation_size = 0
2. SQL 简单提一下
SQL 区分 DQL (查询), DML(插入/更新/删除数据) , DDL(创建/修改/删除表)
2.1. DDL
创建表
|
|
删除表
|
|
2.2. DML
插入数据
|
|
指定列插入数据
|
|
更新语句 , 不设置条件会更新表中所有数据
|
|
更新多条且设置 where 条件
|
|
DELETE FROM
删除 , 当没有 where
关键词时, 表示删除整个表,
|
|
2.3. DQL
排序 order by
|
|
分组查询 group by
需要使用聚合函数
|
|
2.4. 其它 SQL 语句
union
两张表查询的数据整合到一起
union
重复的数据会合并为一条union all
不合并重复数据
|
|
删除表
truncate table
丢弃旧表, 创建新表, 重建索引delete from
一条条删除数据
3. PSQL
3.1. 使用方法
|
|
数据库安装好后, 有三个数据库
postgre
默认数据库template0
最简化模板数据库template1
用户新建数据库时, 默认从template1
克隆, 通常可以定制template1
的内容 ,
使用 PSQL 连接数据库
|
|
3.2. 常用命令
|
|
3.3. 事务
|
|
4. 数据类型
4.1. 表格
类型 | 说明 | 其它数据库对比 |
---|---|---|
布尔 | boolean |
与 mysql 类型相同, 一字节 |
整型 | smallint 2 字节 int 4 字节 bigint 8 字节 |
|
浮点 | real 和 double precision money 8 字节的货币类型 numeric(m,n) 10 进制精确类型 |
|
字符类型 | varchar(n) 变长字符 char(n) 定长, 不足补空格 text 长变文本,无限制 |
Postgresql 的 varchar 最大可存储 1G mysql 的 varchar 最大可存储 64kb |
二进制 | bytea | 对应 mysql 的 blob 和 longblob |
二进制位串 | bit(n) bit varying(n) |
无 |
日期 | date 年月日 time 时分秒 timestamp 年月日时分秒 |
|
网络地址 | cidr 7-19字节, 网络地址 inet 7-19字节, 网络或主机地址macaddr 6 字节, 以太网 mac 地址 |
无 |
数组类型 | ||
枚举类型 | 略 | |
几何类型 | 略 | |
复合类型 | 类似结构体 | |
xml | ||
json | json 和 jsonb |
|
range | 范围类型 | |
其它类型 | 不好分类的类型, 如 UUID |
4.2. 类型转换
方法一 标准 SQL 转换函数 CAST
|
|
方法二 psql 双冒号转换
|
|
4.3. boolean 类型
使用 boolean 类型, 可以约束非空, 设置默认值, 避免 SQL查询时还需要判断空的情况
4.4. 布尔类型操作符
AND
- a,b 都是 null 为 null
- a,b 都是 true, 为 true, 否则 false
OR
- 存在 true 则为 true ,
- 若 a,b 都是 false ,存在 null 则为 null
NOT
not null = null
not true = false
not false = true
IS
布尔类型使用 is
比较
4.5. 字符串函数与操作符
拼接字符串
|
|
求字符串长度
|
|
4.6. 二进制类型
适合存储图片/视频/文件类型
4.7. 时间类型
SELECT LOCALTIMESTAMP(0) - interval ‘15 day’
extract
提取时间中的子域, 如年/月/日/时/分/秒
4.8. 枚举类型
创建枚举, 插入时如果不是枚举中存在的字符串, 则报错
该类型大小写敏感, Sun
!= sun
|
|
查询所有枚举类型
|
|
4.9. json 类型
json
类型保留空格/格式/顺序
jsonb
类型存入时会转换二进制, 取用时不用再次转换, 更高效; 且不会保留空格/格式/顺序等
操作符
操作符 | 描述 |
---|---|
-> |
下标取数组元素 [1,2,3]::json->1 key 取子对象 {“a”:12,“b”:13}::json->‘a’ |
->> |
同上, 取出来的结果是 text 类型 |
#> |
取嵌套对象 {“a”:{“b”:{“c”:1}}} :: json #> ‘{a,b}’ |
#>> |
同上, 取出来的结果是 text 类型 |
有一些操作符仅可用于 jsonb
操作符 | 演示 | 说明 |
---|---|---|
= |
jsonb ‘[1,2]’ = jsonb ‘[1,2]’ | |
@> |
jsonb ‘[1,2]’ @> jsonb ‘[1]’ | 左边对象是否包含右边对象 |
<@ |
… | |
? |
Jsonb ‘{“a”:1,“b”:1}’ ? ‘a’ | a 是否存在于对象的 key 或字符串类型元素中 |
`? | ` | Jsonb ‘{“a”:1,“b”:1}’ ?| array[‘a’,‘b’] |
?& |
Jsonb ‘{“a”:1,“b”:1}’ ?| array[‘a’,‘b’] | 数组中的内容是否都在 json 中 |
4.9.1. jsonb 类型创建索引
|
|
5. 逻辑结构管理
修改数据库最大连接数
|
|
修改表名
|
|
删除数据库
|
|
5.1. 创建模式
schema 是数据库的概念, 可以理解为命名空间或目录;
创建模式
|
|
删除模式
|
|
修改所有者
|
|
修改模式名
|
|
常用函数
NULLIF
两个参数相等时,返回空值,否则返回 v1
|
|
COALESCE
返回第一个非控参数的值,所有参数都为空时返回空
|
|
CASE
条件表达式
|
|