backup
pg_dump -U postgres -d change-this-db-name > /var/lib/postgresql/data/change-this-db-name.sql
restore
psql -U postgres -d change-this-db-name -f /var/lib/postgresql/data/pgdata/change-this-db-name.sql
vector-plugin
apt update
apt install postgresql-17-pgvector
index
-- 普通索引
CREATE INDEX idx_users_email ON users(email);
-- 唯一索引
CREATE UNIQUE INDEX idx_users_email_unique ON users(email);
-- 复合索引
CREATE INDEX idx_users_name_email ON users(name, email);
-- 部分索引
CREATE INDEX idx_active_users ON users(email) WHERE created_at > '2025-01-01';
-- 查看索引
SELECT * FROM pg_indexes WHERE tablename = 'users';
-- 删除索引
DROP INDEX idx_users_email;
create table
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100),
created_at TIMESTAMP DEFAULT NOW()
);
insert
-- 插入单条
INSERT INTO users (name, email) VALUES ('张三', 'zhang@example.com');
-- 插入多条
INSERT INTO users (name, email) VALUES ('李四', 'li@example.com'),
('王五', 'wang@example.com');
-- 返回插入的数据
INSERT INTO users (name, email) VALUES ('赵六', 'zhao@example.com') RETURNING *;
delete
-- 删除指定数据
DELETE FROM users WHERE id = 1;
-- 条件删除
DELETE FROM users WHERE created_at < '2025-01-01';
-- 删除全部(慎用)
DELETE FROM users;
update
-- 更新数据
UPDATE users SET email = 'new@example.com' WHERE id = 1;
-- 更新多个字段
UPDATE users SET name = '张三丰', email = 'zhang@new.com' WHERE id = 1;
-- 返回更新的数据
UPDATE users SET name = '李四光' WHERE id = 2 RETURNING *;
select
-- 查询全部
SELECT * FROM users;
-- 条件查询
SELECT * FROM users WHERE name = '张三';
-- 排序和限制
SELECT * FROM users ORDER BY created_at DESC LIMIT 10;
-- 模糊查询
SELECT * FROM users WHERE email LIKE '%@example.com';
常用查询
-- 分页
SELECT * FROM users ORDER BY id LIMIT 10 OFFSET 20;
-- 聚合
SELECT COUNT(*) FROM users;
SELECT COUNT(*), MAX(created_at) FROM users;
-- 分组
SELECT name, COUNT(*) FROM users GROUP BY name;
-- JOIN
SELECT u.name, o.order_id
FROM users u
JOIN orders o ON u.id = o.user_id;