基础与 psql
安装与启动
Tip
psql 支持 \x 切换扩展显示(一行多列的数据更易读)、\timing 显示每条语句耗时、\e 用编辑器写多行 SQL。熟练这些元命令能显著提升效率。
Schema:命名空间
PG 与 MySQL 的「database」概念不同:一个数据库内可有多个 Schema,用于组织对象与做权限隔离。
Warning
PG 是 database → schema → table 三层结构,而 MySQL 是 database → table 两层。别把 PG 的「database」当成 MySQL 的「database」,跨库查询在 PG 中需用 dblink/postgres_fdw 或直接切换连接。
数据类型
Tip
时间一律用 TIMESTAMPTZ 并存 UTC。它把时刻规范化为 UTC 存储,读取时按会话时区呈现,能避免大部分时区错乱问题。gen_random_uuid() 在 PG 13+ 内置(pgcrypto 也可提供)。
用 Go 连接 PostgreSQL
推荐使用 pgx(性能与类型支持最好)。可直接用 pgx 原生接口,也可用其 stdlib 适配 database/sql。
Warning
PG 的占位符是 $1、$2(不是 ?)。使用 database/sql + pgx/stdlib 时同样是 $n;GORM 的 PG 驱动会自动转换 ?,但手写 SQL 时务必注意。
小结
- PG 是 database → schema → table 三层结构,
search_path控制默认解析顺序。 - 类型系统丰富:数组、JSONB、UUID、范围类型一应俱全;时间优先
TIMESTAMPTZ。 - Go 首选 pgx(
pgxpool连接池);占位符为$n。 - 密码等敏感信息通过环境变量注入。