这里主要记录在日常使用 PostgreSQL 时,遇到的一些零碎问题。不易写成独立文章,所以统一记录于此。
1. 数据库性能测试
主要是为了,压测部署服务器的机器性能!
- 使用如下
yaml
启动压测的数据库服务。
version: "2.4"
services:
postgres:
restart: on-failure
container_name: app_test_pg
image: postgres:latest
volumes:
- "./app_pg:/data"
environment:
- DEBUG=false
- POSTGRES_DB=app
- POSTGRES_PASSWORD=123456
networks:
- app_pg_test_network
networks:
app_pg_test_network:
- 进入容器,使用如下命令开始压测。
# 初始化 216w 数据
$ psql -U postgres -h 127.0.0.1 -p 5432
create database pgbench;
# 测试性能
$ pgbench -i --unlogged-tables -s 216 -U postgres -p 5432 -d pgbench;
$ pgbench -M simple -r -c 10 -j 10 -T 300 -l -U postgres -h 127.0.0.1 -p 5432 -d pgbench
2. 查看连接数变化
查看数据库版本、查看连接数数量等操作
CPU
利用率到达100%
,首先怀疑,是不是业务高峰活跃连接陡增,而数据库预留的资源不足造成的结果。我们需要查看下,问题发生时,活跃的连接数是否比平时多很多。对于RDS for PG
,数据库上的连接数变化,可以从控制台的监控信息中看到。而当前活跃的连接数可以直接连接数据库,使用下列查询语句得到:
# 查看数据库版本
> select version();
> select * from alembic_version;
# 查看连接数数量
> select count(*) from pg_stat_activity where state not like '%idle';
3. 查询中文显示乱码
通过 select 语句查询时,发现有中文时显示乱码!
默认情况下,PostgreSQL
数据库是不转换字符集的,如果你的数据库是 UTF8
的字符集,一般终端的中文字符集会设置为 GBK
或 en_US
(查看终端的字符集可以看 LANG
环境变量的设置)。
- 设置
PostgreSQL
的客户端编码
# 修改pgsql客户端字符集
\encoding GBK
\encoding UTF8
- 设置终端的环境变量
# 设置环境变量
export PGCLIENTENCODING=GBK
export PGCLIENTENCODING=UTF8
- 设置连接工具的字符编码
# 设置终端的编码
# Option->SessionOption->外观->字符编码
export LANG=zh_CN.UTF8
4. 数据库常用操作汇总
汇总常会用到的数据操作,以便于之后自己查询和使用!
- [1] 数据库字段起别名
select id "编号", uname "工号" from "user" where new=0 order by id;
- [2] 将数据导出为 CSV 文件
\o /data/user_list.csv
select id, uname from "user";
\o
# 使用 COPY 语句导出数据
COPY persons TO '/data/user_list.csv' DELIMITER ',' CSV HEADER;
# 使用\copy命令导出数据
\copy (SELECT * FROM persons) to '/data/user_list.csv' with csv