PG数据库

PostgreSQL 数据库日常应用

一、连接与基础命令

1. 命令行连接

bash

运行

复制代码
# 本地
psql -U postgres -d dbname

# 远程
psql -h 192.168.x.x -p 5432 -U postgres -d dbname

2. psql 常用元命令

  • \l:列出所有数据库
  • \c dbname:切换数据库
  • \dt:查看当前库所有表
  • \d tablename:查看表结构
  • \du:查看所有用户 / 角色
  • \q:退出
  • \?:帮助

二、库与表操作

1. 数据库

sql

复制代码
CREATE DATABASE testdb;
DROP DATABASE IF EXISTS testdb;

-- 查看库大小
SELECT pg_size_pretty(pg_database_size('testdb'));

2. 建表(常用模板)

sql

复制代码
CREATE TABLE t_user (
  id SERIAL PRIMARY KEY,
  name VARCHAR(32) NOT NULL,
  phone VARCHAR(11),
  create_time TIMESTAMP DEFAULT now()
);

-- 注释
COMMENT ON TABLE t_user IS '用户表';
COMMENT ON COLUMN t_user.name IS '姓名';

3. 表结构修改

sql

复制代码
ALTER TABLE t_user ADD COLUMN age INT;
ALTER TABLE t_user RENAME COLUMN age TO user_age;
ALTER TABLE t_user ALTER COLUMN phone SET NOT NULL;
DROP TABLE IF EXISTS t_user;

三、数据 CRUD

1. 插入

sql

复制代码
INSERT INTO t_user(name, phone) VALUES ('张三', '13800138000');

-- 批量插入
INSERT INTO t_user(name) VALUES ('李四'),('王五');

-- 存在则更新(UPSERT)
INSERT INTO t_user(id,name) VALUES (1,'张三')
ON CONFLICT (id) DO UPDATE SET name=EXCLUDED.name;

2. 查询

sql

复制代码
SELECT * FROM t_user WHERE id=1;

-- 分页
SELECT * FROM t_user LIMIT 10 OFFSET 0;

-- 模糊(不区分大小写)
SELECT * FROM t_user WHERE name ILIKE '%张%';

-- 聚合
SELECT count(*) FROM t_user;

3. 更新 & 删除

sql

复制代码
UPDATE t_user SET phone='13900001111' WHERE id=1;

DELETE FROM t_user WHERE id=1;
TRUNCATE TABLE t_user;  -- 清空表(快,不可回滚)

四、用户与权限

1. 创建用户

sql

复制代码
CREATE USER app_user WITH LOGIN PASSWORD '123456';

2. 只读权限

sql

复制代码
GRANT CONNECT ON DATABASE testdb TO readonly_user;
GRANT USAGE ON SCHEMA public TO readonly_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_user;

-- 未来新建表自动授权
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO readonly_user;

3. 读写权限

sql

复制代码
GRANT SELECT,INSERT,UPDATE,DELETE ON t_user TO app_user;
REVOKE DELETE ON t_user FROM app_user;

五、索引与常用维护

1. 建索引

sql

复制代码
CREATE INDEX idx_user_phone ON t_user(phone);

2. 查看执行计划

sql

复制代码
EXPLAIN ANALYZE SELECT * FROM t_user WHERE phone='13800138000';

3. 表统计信息 / 清理

sql

复制代码
ANALYZE t_user;       -- 更新统计信息
VACUUM ANALYZE t_user;-- 清理死元组+分析

4. 查看表大小

sql

复制代码
SELECT pg_size_pretty(pg_relation_size('t_user'));

六、备份与恢复

1. 备份(pg_dump)

bash

运行

复制代码
pg_dump -U postgres -d testdb -f testdb.sql

2. 恢复

bash

运行

复制代码
psql -U postgres -d testdb -f testdb.sql

七、常用系统查询

sql

复制代码
-- 查看连接数
SELECT count(*) FROM pg_stat_activity;

-- 查看慢查询/活跃SQL
SELECT query,state,pid FROM pg_stat_activity WHERE state!='idle';

-- 杀进程
SELECT pg_terminate_backend(pid);
相关推荐
程序猿乐锅31 分钟前
【Tilas|第三篇】多表SQL语句
数据库·经验分享·笔记·学习·mysql
Navicat中国1 小时前
使用 Navicat 导入向导导入 Excel 数据时,系统提示导入成功,表中也能看到数据,但行数统计显示为 0,这是什么原因?
数据库·excel·导入
gmaajt2 小时前
Golang怎么做国际化多语言_Golang i18n教程【核心】
jvm·数据库·python
折哥的程序人生 · 物流技术专研2 小时前
从“卡死”到“秒过”:WMS销售数据跨库回填的极限优化之旅
数据库·机器学习·oracle
李可以量化2 小时前
DeepSeek 量化交易实战:用标准化提示词模板实现 AI 辅助交易决策
大数据·数据库·人工智能
maqr_1102 小时前
CSS如何利用Sass定义全局阴影方案_通过变量实现统一CSS风格
jvm·数据库·python
m0_613856292 小时前
uni-app怎么做类似于美团的商家评价星级 uni-app五星评分组件制作【实战】
jvm·数据库·python
Irene19913 小时前
大数据开发语境下,SQL 模式名,映射关系 - - 概念理解
大数据·数据库·sql
顾随3 小时前
(二)kettle--输入与输出
javascript·数据库·kettle
2401_833033623 小时前
如何修复固定定位头部容器中悬浮下拉菜单的错位问题
jvm·数据库·python