605 字
3 分钟
PostgreSQL 入门笔记

记录一些 PostgreSQL 的入门要点,方便以后查阅。

为什么选 PostgreSQL#

  • 严格的类型系统和标准 SQL 兼容性
  • 丰富的数据类型:jsonb、数组、范围、几何类型
  • 强大的索引能力:部分索引、表达式索引、GIN/GiST
  • 事务与并发控制实现严谨(MVCC)
  • 扩展生态好:PostGIS、pg_trgm、TimescaleDB

安装与连接#

Terminal window
# Debian/Ubuntu
sudo apt install postgresql
# 进入交互式终端
sudo -u postgres psql
# 或指定连接参数
psql -h 127.0.0.1 -p 5432 -U myuser -d mydb

常用元命令:

\l -- 列出数据库
\dt -- 列出当前库的表
\d table -- 查看表结构
\du -- 列出角色
\c dbname -- 切换数据库
\x -- 切换展开输出(宽表很有用)
\timing -- 显示每条语句耗时
\q -- 退出

基础 SQL#

CREATE TABLE users (
id bigserial PRIMARY KEY,
email text NOT NULL UNIQUE,
nickname text,
profile jsonb DEFAULT '{}'::jsonb,
created_at timestamptz NOT NULL DEFAULT now()
);
INSERT INTO users (email, nickname)
VALUES ('a@example.com', 'alice')
RETURNING id;
SELECT id, email
FROM users
WHERE created_at > now() - interval '7 days'
ORDER BY created_at DESC
LIMIT 20;

注意 timestamptztimestamp 的区别:前者带时区语义,绝大多数场景都该用它。

索引#

-- 普通 B-tree
CREATE INDEX idx_users_email ON users (email);
-- 表达式索引:支持大小写不敏感查询
CREATE INDEX idx_users_email_lower ON users (lower(email));
-- 部分索引:只索引活跃用户
CREATE INDEX idx_active_users ON users (created_at)
WHERE created_at > '2026-01-01';
-- jsonb 的 GIN 索引
CREATE INDEX idx_users_profile ON users USING gin (profile);

EXPLAIN ANALYZE 验证索引是否真的被用上,不要凭感觉加索引。

事务#

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;

PostgreSQL 默认是 READ COMMITTED。需要更强的隔离时可显式指定:

BEGIN ISOLATION LEVEL REPEATABLE READ;

备份与恢复#

Terminal window
# 逻辑备份
pg_dump -Fc mydb > mydb.dump
# 恢复
pg_restore -d mydb mydb.dump
# 全库
pg_dumpall > all.sql

生产环境还应配置 WAL 归档做时间点恢复(PITR)。

与 MySQL 的主要差异#

维度PostgreSQLMySQL
布尔类型原生 booleantinyint(1)
自增bigserial / GENERATEDAUTO_INCREMENT
字符串text(无长度限制)需指定长度或用 TEXT
JSONjsonb 可索引JSON 较弱
大小写标识符折叠为小写取决于平台
事务 DDL支持事务内 DDL不支持

小结#

入门阶段抓住三件事就够了:用对类型(尤其 timestamptzjsonbEXPLAIN ANALYZE 验证索引搞清事务隔离级别。剩下的边用边查。

参考#

PostgreSQL 入门笔记
https://lickoc.site/posts/postgresql-notes/
作者
Lickoc
发布于
2026-09-14
许可协议
CC BY-NC-SA 4.0

分享文章

生成精美分享图或复制链接,与更多人分享本文。

继续阅读

沿着主题读

基于共同的标签与分类

换条路线

从其他文章中稳定抽取