Postgres常见零碎问题汇总


这里主要记录在日常使用 PostgreSQL 时,遇到的一些零碎问题。不易写成独立文章,所以统一记录于此。

Postgres常见零碎问题汇总


3. 数据库性能测试

主要是为了,压测部署服务器的机器性能!

  • 使用如下 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 的字符集,一般终端的中文字符集会设置为 GBKen_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

文章作者: Escape
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Escape !
  目录