PostgreSQL 快速入门指南

一、安装与连接

安装

macOS(推荐 Homebrew)

brew install postgresql@16
brew services start postgresql@16

Ubuntu / Debian

sudo apt update
sudo apt install postgresql postgresql-contrib
sudo systemctl start postgresql

Windows

postgresql.org 下载安装程序,或使用 WSL2 + Ubuntu 方案。

连接数据库

# 本地默认连接
psql -U postgres

# 指定数据库
psql -U postgres -d mydb

# 远程连接(URL)
psql "postgresql://user:pass@host:5432/db"

💡 首次安装后,系统会自动创建 postgres 超级用户,建议立即修改其密码:

ALTER USER postgres WITH PASSWORD '新密码';

二、基础操作

创建与切换数据库

-- 创建数据库
CREATE DATABASE myapp;

-- 切换数据库(在 psql 中)
\c myapp

-- 查看所有数据库
\l

创建表

CREATE TABLE users (
  id         SERIAL PRIMARY KEY,
  username   VARCHAR(50) UNIQUE NOT NULL,
  email      VARCHAR(100) NOT NULL,
  age        INTEGER CHECK (age >= 0),
  created_at TIMESTAMP DEFAULT NOW()
);

常用数据类型

类别类型说明
整数INTEGER / BIGINT整数;BIGINT 用于大数
小数NUMERIC(p,s)精确小数,适合金额
文本VARCHAR(n) / TEXT有长度限制 / 无限制文本
时间TIMESTAMP / DATE日期时间 / 仅日期
其他BOOLEAN / UUID / JSONB布尔值 / UUID / JSON(二进制)

三、增删改查(CRUD)

INSERT — 插入数据

-- 插入单行
INSERT INTO users (username, email, age)
VALUES ('alice', 'alice@example.com', 28);

-- 插入多行
INSERT INTO users (username, email, age) VALUES
  ('bob', 'bob@example.com', 32),
  ('carol', 'carol@example.com', 25)
RETURNING id;  -- 返回自增 ID

SELECT — 查询数据

-- 基础查询
SELECT * FROM users WHERE age > 18;

-- 常用子句
SELECT username, email
FROM users
WHERE age BETWEEN 20 AND 35
ORDER BY created_at DESC
LIMIT 10 OFFSET 20;

-- 聚合
SELECT AVG(age), COUNT(*) FROM users;

UPDATE — 更新数据

UPDATE users
SET email = 'new@example.com', age = 29
WHERE username = 'alice'
RETURNING *;

DELETE — 删除数据

-- 删除指定行
DELETE FROM users WHERE id = 5;

-- 清空表(保留结构)
TRUNCATE users;

⚠️ UPDATE / DELETE 不加 WHERE 会影响全表。养成先用 SELECT 确认范围的习惯。

四、psql 快捷命令

命令说明
\l列出所有数据库
\c dbname切换到指定数据库
\dt列出当前库的所有表
\d tablename查看表结构(字段、索引、约束)
\du列出所有用户/角色
\dn列出所有 schema
\df列出所有函数
\dv列出所有视图
\i file.sql执行外部 SQL 文件
\o file.txt将输出重定向到文件
\timing开关查询耗时显示
\e在外部编辑器中编辑命令
\x切换扩展显示模式(行转列)
\q退出 psql
\?显示所有 psql 内置命令帮助
\h SELECT显示 SQL 语法帮助

五、进阶技巧

索引

-- 普通索引
CREATE INDEX idx_users_email ON users(email);

-- 唯一索引
CREATE UNIQUE INDEX idx_users_username ON users(username);

-- 部分索引(节省空间)
CREATE INDEX idx_active ON users(created_at)
WHERE age >= 18;

-- 查看执行计划
EXPLAIN ANALYZE SELECT * FROM users WHERE email = 'x@y.com';

事务

BEGIN;
  UPDATE accounts SET balance = balance - 100 WHERE id = 1;
  UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
-- 出错时:ROLLBACK;

JSON / JSONB 查询

-- 查询 JSONB 字段
SELECT data->>'name' FROM products WHERE data @> '{"in_stock": true}';

-- 创建 GIN 索引加速 JSONB
CREATE INDEX idx_gin ON products USING GIN(data);

备份与恢复

# 备份
pg_dump mydb > backup.sql

# 恢复
psql mydb < backup.sql

连接与慢查询管理

-- 查看当前连接
SELECT pid, usename, state, query FROM pg_stat_activity;

-- 终止慢查询
SELECT pg_terminate_backend(pid) FROM pg_stat_activity
WHERE state = 'active' AND query_start < NOW() - INTERVAL '5 min';

🚀 性能调优首选:EXPLAIN ANALYZE 找慢查询 → 添加合适索引 → 调整 postgresql.conf 参数(work_memshared_buffers)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tenifs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值