本文主要汇总 PostgreSQL 侧常用概念与配置要点:集群内数据库/模式/表等对象层级、索引用途与代价、pg_hba.conf 远程访问注意项,以及 psql\dt+ 各列含义。

由 queue 碎片 basic-concepts、indexes、pg-hba、dt-plus 合并改写,服务于日常运维与读代码时的对照,不是百科全文。日常命令见 pgsql 日常运维速查;热备见 流复制热备

对象层级与基本概念

概念要点
集群 / 实例一次 PostgreSQL 服务进程与数据目录;内可有多库
数据库 (Database)隔离的对象集合;连接时必须指定库名
默认库常见 postgrestemplate1 为新建库模板;template0 为干净模板
模式 (Schema)库内命名空间;默认多用 public;可用 schema.objectsearch_path
表 / 列 / 行关系存储基本单位;列有类型与约束
主键 / 外键唯一标识行;引用完整性
角色 (Role)权限主体;可登录角色即用户,也可作组角色
事务ACID;一组语句全成或全败
数据类型数值、文本、时间、布尔、JSON/JSONB、数组、网络地址等

连接时「连到哪一库」与「对象在哪个 schema」是两层问题:库隔离更强,schema 用于库内组织。

索引:用途、代价与常见类型

作用

索引用额外结构保存键值到行定位(PostgreSQL 中常为 TID),避免大表上低效的全表扫描。优化器比较「用索引」与「扫表」成本后决定是否使用索引;选择性差或表很小时可能故意不用索引。

收益与成本

正面负面
加速 WHERE / JOIN / 部分 ORDER BY/GROUP BY占磁盘
唯一索引可强制唯一性拖慢 INSERT/UPDATE/DELETE(需维护索引)
外键列上索引常利于检查与连接VACUUM/REINDEX 等维护

本质是空间与写放大换读性能。只在真实慢查询路径与高选择性列上建索引。

B-Tree(默认最常用)

  • 自平衡树;叶子存 (键, TID),支持等值与范围。
  • 查找复杂度量级约 O(log N)。
  • 范围查询可在叶子链表上顺序走。

其它类型(选用场景)

类型典型用途
Hash等值;不支持范围(使用场景相对受限)
GiST / GIN全文、JSONB、地理等复杂类型
BRIN物理有序大表、范围查询,索引体积小

建哪类索引、建在哪些列,应结合 EXPLAIN (ANALYZE, BUFFERS) 与业务读写比,避免「凡列必建」。

pg_hba.conf 与远程访问

pg_hba.conf自上而下匹配:谁从哪来、连哪库、用何认证。postgresql.conflisten_addresses 决定监听网卡。

危险示例(仅限短时实验)

# 切勿长期用于生产
host    all    all    0.0.0.0/0    trust

配合 listen_addresses = '*' 等于把库裸奔到可达网络。

相对可接受的远程测试

host    all    all    0.0.0.0/0    scram-sha-256

仍应用防火墙收紧源 IP;更好是 VPN / SSH 隧道 / 内网白名单。

操作顺序示意

  1. postgresql.conflisten_addresses(若需远程)。
  2. pg_hba.conf:追加规则(注意顺序,更具体的规则靠前)。
  3. systemctl reload/restart postgresqlSELECT pg_reload_conf();(hba 通常 reload 即可,以版本文档为准)。
  4. 验证:ss -lntp | grep 5432、客户端 psql -h <host> -U <user> -d <db> -W
  5. 测完立刻收回宽规则。

排障提示

现象检查
连接被拒绝防火墙、listen_addresses、服务是否监听
认证失败hba 匹配行、密码、认证方法
改配置无效是否 reload;是否 PgBouncer 等中间层

路径示例(发行版不同):

  • Debian/Ubuntu:/etc/postgresql/<ver>/main/
  • RHEL 系:/var/lib/pgsql/data//var/lib/pgsql/<ver>/data/

\dt+ 输出列含义

psql\dt+ 列出表并带附加元数据。示意:

 Schema | Name | Type | Owner | Persistence | Access method | Size | Description
含义
Schema所属模式,常见 public
Name表名
Type\dt 下多为 table
Owner所有者角色
Persistencepermanent 普通持久表;unlogged 不写 WAL(崩溃可丢、一般不复制);temporary 会话级
Access method多为 heap(行存)
Size表堆大约占用,通常不含索引与 TOAST;全量可用 pg_total_relation_size(...)
DescriptionCOMMENT ON TABLE 注释,未设置则空

查看索引体积可用 \di+;库级可用 \l+

验证与实践建议

  • 概念:能说明「库 vs schema」「角色 vs 登录用户」「索引为何伤写」。
  • 索引:对慢 SQL 先 EXPLAIN,再决定加/删索引。
  • hba:任何 0.0.0.0/0 + trust 必须有时限与回滚步骤。
  • \dt+:用 Size 粗看膨胀,深入用 pg_relation_size / pg_total_relation_size

参考资料