快速操作指南
1. 实例管理
1.1 创建实例
# 标准创建(交互式密码)
initdb -D /opt/uxdbinstall/dbsql/data
# 非交互式(脚本化部署)
initdb -D /opt/uxdbinstall/dbsql/data --pwfile=/path/to/password.txt
# 指定超级用户
initdb -D /opt/uxdbinstall/dbsql/data -U uxadmin
关键检查点:
- 数据目录父目录权限:必须属于
uxdb用户,非root - 禁止root运行initdb
- 磁盘空间:至少预留20%增长空间
1.2 删除实例
# 标准删除(需确认无连接)
removedb -D /opt/uxdbinstall/dbsql/data
# 强制删除(慎用!)
removedb -D /opt/uxdbinstall/dbsql/data -F
⚠️ 危险操作检查清单:
- 已停止服务
ux_ctl stop - 确认无活跃连接
ps -ef | grep uxdb - 已备份数据(如需要保留)
- 非生产环境或已获变更授权
1.3 查看实例状态
# 方法1:专用命令
ux_ctl status -D /opt/uxdbinstall/dbsql/data
# 方法2:进程检查
ps -ef | grep uxdb | grep -v grep
# 方法3:PID文件检查
cat /opt/uxdbinstall/dbsql/data/uxmaster.pid
状态码解读:
ux_ctl status返回0:运行中ux_ctl status返回3:未运行ux_ctl status返回4:数据目录不可访问
2. 服务管理
2.1 启动服务
# 前台启动(调试用)
uxdb -D /opt/uxdbinstall/dbsql/data
# 后台启动(生产标准)
ux_ctl start -D /opt/uxdbinstall/dbsql/data -l /var/log/uxdb/server.log
# 带启动超时控制
ux_ctl start -D /opt/uxdbinstall/dbsql/data -t 120
启动失败速查:
| 现象 | 可能原因 | 快速处理 |
|---|---|---|
could not bind IPv4 address | 端口被占用 | lsof -i :5432 检查冲突进程 |
could not create shared memory | SHMMAX不足 | 参考《系统管理手册》2.3.1节调整内核参数 |
could not create semaphores | 信号量不足 | 增加 SEMMNI 和 SEMMNS |
2.2 关闭服务
# 智能关闭(等待连接断开,推荐)
ux_ctl stop -D /opt/uxdbinstall/dbsql/data -m smart
# 快速关闭(强制断开,默认)
ux_ctl stop -D /opt/uxdbinstall/dbsql/data -m fast
# 立即关闭(类似kill -9,需恢复)
ux_ctl stop -D /opt/uxdbinstall/dbsql/data -m immediate
模式选择决策树:
是否有活跃业务连接?
├── 是 → 先通知应用断开 → 使用 smart
│ └── 超时? → 改用 fast
└── 否 → 使用 fast(平衡安全与速度)
└── 紧急情况(如OOM)→ immediate
2.3 服务重载配置
# 不中断服务重载配置
ux_ctl reload -D /opt/uxdbinstall/dbsql/data
# 或发送信号
kill -HUP `head -1 /opt/uxdbinstall/dbsql/data/uxmaster.pid`
3. 数据库管理
3.1 创建数据库
-- 基础创建
CREATE DATABASE dbname;
-- 指定所有者
CREATE DATABASE dbname OWNER rolename;
-- 指定模板(创建"纯净"数据库)
CREATE DATABASE dbname TEMPLATE template0;
-- 指定表空间
CREATE DATABASE dbname TABLESPACE ts_name;
Shell等效命令:
createdb dbname
createdb -O rolename dbname
createdb -T template0 dbname
3.2 删除数据库
-- 标准删除
DROP DATABASE dbname;
⚠️ 前置检查:
- 当前未连接目标数据库(需切到其他库如template1)
- 无其他会话连接目标数据库
-- 检查连接会话
SELECT * FROM ux_stat_activity WHERE datname = 'dbname';
-- 强制终止其他连接(慎用)
SELECT ux_terminate_backend(pid) FROM ux_stat_activity
WHERE datname = 'dbname' AND pid <> ux_backend_pid();
3.3 查看数据库
-- 列表
SELECT datname FROM ux_database;
-- 详细信息
SELECT datname, datdba, encoding, datcollate, datctype
FROM ux_database WHERE datname NOT IN ('template0', 'template1');
uxsql快捷命令:
\l -- 列出所有数据库
\l+ -- 详细信息(大小、表空间等)
\c dbname -- 切换数据库
4. 用户与权限
4.1 用户管理速查
-- 创建用户
CREATE USER username WITH PASSWORD 'password';
-- 创建超级用户
CREATE USER admin WITH PASSWORD 'password' SUPERUSER;
-- 创建可创建数据库的用户
CREATE USER appuser WITH PASSWORD 'password' CREATEDB;
-- 修改密码
ALTER USER username WITH PASSWORD 'newpassword';
-- 删除用户
DROP USER username;
三权分立用户(安全模式):
-- 系统管理员
CREATE USER uxsmo WITH PASSWORD 'xxx' CREATEDB CREATEROLE;
-- 安全管理员
CREATE USER uxsso WITH PASSWORD 'xxx';
-- 审计管理员
CREATE USER uxsao WITH PASSWORD 'xxx';
4.2 权限授予与回收
-- 表权限
GRANT SELECT, INSERT, UPDATE ON table_name TO username;
GRANT ALL ON table_name TO username;
REVOKE DELETE ON table_name FROM username;
-- 数据库权限
GRANT CONNECT ON DATABASE dbname TO username;
GRANT CREATE ON DATABASE dbname TO username;
-- 模式权限
GRANT USAGE ON SCHEMA schema_name TO username;
GRANT CREATE ON SCHEMA schema_name TO username;
-- 列级权限(特殊场景)
GRANT SELECT (col1, col2), UPDATE (col1) ON table_name TO username;
4.3 查看权限
-- 查看用户列表
SELECT usename, usesuper, usecreatedb, usecatupd FROM ux_user;
-- 查看表权限
\dp table_name -- uxsql命令
-- 查看用户权限详情
SELECT * FROM information_schema.table_privileges
WHERE grantee = 'username';
5. 模式管理
-- 创建模式
CREATE SCHEMA schema_name;
CREATE SCHEMA schema_name AUTHORIZATION username;
-- 查看模式
SELECT nspname FROM ux_namespace WHERE nspname NOT LIKE 'ux_%';
\dn -- uxsql快捷命令
-- 修改模式
ALTER SCHEMA schema_name RENAME TO new_name;
ALTER SCHEMA schema_name OWNER TO new_owner;
-- 删除模式
DROP SCHEMA schema_name; -- 空模式
DROP SCHEMA schema_name CASCADE; -- 级联删除所有对象
模式搜索路径:
-- 查看当前搜索路径
SHOW search_path;
-- 修改搜索路径(会话级)
SET search_path = schema1, schema2, public;
-- 修改搜索路径(用户默认)
ALTER USER username SET search_path = schema1, public;
6. 表管理
6.1 创建与修改
-- 建表
CREATE TABLE table_name (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 指定表空间
CREATE TABLE table_name (...) TABLESPACE ts_name;
-- 修改表
ALTER TABLE table_name ADD COLUMN new_col INTEGER;
ALTER TABLE table_name DROP COLUMN old_col;
ALTER TABLE table_name ALTER COLUMN col_name TYPE VARCHAR(200);
ALTER TABLE table_name RENAME TO new_name;
ALTER TABLE table_name RENAME COLUMN old_name TO new_name;
6.2 数据操作
-- 插入
INSERT INTO table_name (col1, col2) VALUES ('val1', 'val2');
INSERT INTO table_name VALUES ('val1', 'val2');
-- 更新
UPDATE table_name SET col1 = 'newval' WHERE id = 1;
-- 删除
DELETE FROM table_name WHERE id = 1;
-- 清空表(快速,不可回滚)
TRUNCATE TABLE table_name;
TRUNCATE TABLE table_name CASCADE; -- 级联清空关联表
6.3 查看表信息
-- 列表
SELECT tablename FROM ux_tables WHERE schemaname = 'public';
\dt -- uxsql快捷命令
\dt schema.* -- 指定模式
-- 表结构
\d table_name -- 基本结构
\d+ table_name -- 详细信息(存储、注释等)
-- 查看表大小
SELECT ux_size_pretty(ux_total_relation_size('table_name'));
6.4 索引管理
-- 创建索引
CREATE INDEX idx_name ON table_name (column_name);
CREATE UNIQUE INDEX idx_name ON table_name (col1, col2);
CREATE INDEX idx_name ON table_name USING GIN (json_col);
-- 查看索引
SELECT indexname FROM ux_indexes WHERE tablename = 'table_name';
\di -- uxsql快捷命令
-- 重建索引
REINDEX INDEX idx_name;
REINDEX TABLE table_name;
-- 删除索引
DROP INDEX idx_name;
7. 表空间管理
-- 创建表空间(需先创建操作系统目录并授权)
CREATE TABLESPACE ts_name LOCATION '/data/uxdb/ts_name';
-- 查看表空间
SELECT spcname, ux_size_pretty(ux_tablespace_size(oid)) FROM ux_tablespace;
\db -- uxsql快捷命令
-- 修改表空间
ALTER TABLESPACE ts_name RENAME TO new_name;
ALTER TABLESPACE ts_name OWNER TO new_owner;
-- 删除表空间(需先清空所有对象)
DROP TABLESPACE ts_name;
表空间使用场景:
| 场景 | 操作 |
|-----|------|
| 大表独立存储 | CREATE TABLE big_table (...) TABLESPACE fast_ssd; |
| 移动现有表 | ALTER TABLE table_name SET TABLESPACE new_ts; |
| 批量移动 | ALTER DATABASE db_name SET default_tablespace = ts_name; |
8. 事务与并发
8.1 事务控制
-- 显式事务
BEGIN;
-- ... SQL操作 ...
COMMIT; -- 或 ROLLBACK;
-- 事务保存点
BEGIN;
SAVEPOINT sp1;
-- ... 操作1 ...
ROLLBACK TO sp1; -- 回滚到保存点
-- ... 操作2 ...
COMMIT;
8.2 锁问题排查
-- 查看当前锁
SELECT * FROM ux_locks WHERE NOT granted;
-- 查看锁等待链
SELECT * FROM ux_stat_activity WHERE wait_event_type = 'Lock';
-- 查看阻塞者
SELECT blocked_locks.pid AS blocked_pid,
blocked_activity.usename AS blocked_user,
blocking_locks.pid AS blocking_pid,
blocking_activity.usename AS blocking_user,
blocked_activity.query AS blocked_statement,
blocking_activity.query AS blocking_statement
FROM ux_catalog.ux_locks blocked_locks
JOIN ux_catalog.ux_stat_activity blocked_activity ON blocked_activity.pid = blocked_locks.pid
JOIN ux_catalog.ux_locks blocking_locks ON blocking_locks.locktype = blocked_locks.locktype
JOIN ux_catalog.ux_stat_activity blocking_activity ON blocking_activity.pid = blocking_locks.pid
WHERE NOT blocked_locks.granted;
8.3 终止问题会话
-- 温和终止(发送SIGTERM)
SELECT ux_terminate_backend(pid) FROM ux_stat_activity WHERE usename = 'problem_user';
-- 查看终止结果
SELECT pid, state, query FROM ux_stat_activity WHERE pid = 12345;
9. 常用诊断查询
9.1 连接与活动
-- 当前连接数
SELECT count(*) FROM ux_stat_activity;
-- 按状态分组
SELECT state, count(*) FROM ux_stat_activity GROUP BY state;
-- 活跃查询(运行中)
SELECT pid, usename, query_start, query
FROM ux_stat_activity
WHERE state = 'active' AND pid != ux_backend_pid();
-- 空闲事务(潜在问题)
SELECT pid, usename, xact_start, query
FROM ux_stat_activity
WHERE state = 'idle in transaction';
9.2 空间使用
-- 数据库大小
SELECT datname, ux_size_pretty(ux_database_size(datname)) FROM ux_database;
-- 表大小排名(前10)
SELECT schemaname, tablename,
ux_size_pretty(ux_total_relation_size(schemaname||'.'||tablename)) as size
FROM ux_tables
ORDER BY ux_total_relation_size(schemaname||'.'||tablename) DESC
LIMIT 10;
-- 表膨胀检查(需要pgstattuple扩展)
SELECT schemaname, tablename,
ux_size_pretty(ux_relation_size(schemaname||'.'||tablename)) as size,
round(100 * ux_relation_size(schemaname||'.'||tablename) /
ux_total_relation_size(schemaname||'.'||tablename)) as pct_of_total
FROM ux_tables;
9.3 性能快照
-- 缓存命中率(应>99%)
SELECT
sum(heap_blks_hit) / (sum(heap_blks_hit) + sum(heap_blks_read)) * 100 as hit_ratio
FROM ux_statio_user_tables;
-- 索引使用统计
SELECT schemaname, tablename, indexrelname,
idx_scan, idx_tup_read, idx_tup_fetch
FROM ux_stat_user_indexes
ORDER BY idx_scan DESC;
-- 顺序扫描过多的表(潜在缺失索引)
SELECT schemaname, tablename, seq_scan, seq_tup_read,
idx_scan, n_live_tup
FROM ux_stat_user_tables
WHERE seq_scan > 0
ORDER BY seq_scan DESC;
10. 应急处理流程
场景A:连接风暴
# 1. 快速查看连接数
ps aux | grep uxdb | wc -l
# 2. 查看等待连接
uxsql -c "SELECT count(*) FROM ux_stat_activity WHERE state = 'active';"
# 3. 如达到max_connections,需终止空闲连接或重启(谨慎)
uxsql -c "SELECT ux_terminate_backend(pid) FROM ux_stat_activity
WHERE state = 'idle' AND state_change < now() - interval '1 hour';"
# 4. 长期方案:增加max_connections或部署连接池
场景B:磁盘空间告警
-- 1. 定位大对象
SELECT schemaname, tablename,
ux_size_pretty(ux_total_relation_size(schemaname||'.'||tablename)) as size
FROM ux_tables
ORDER BY ux_total_relation_size(schemaname||'.'||tablename) DESC
LIMIT 20;
-- 2. 检查WAL堆积
SELECT ux_size_pretty(ux_wal_lsn_diff(ux_current_wal_lsn(), '0/00000000'));
-- 3. 检查临时文件
SELECT ux_size_pretty(sum(size)) FROM ux_stat_activity WHERE temp_files > 0;
-- 4. 紧急清理(如确认安全)
VACUUM FULL large_table; -- 会锁表!
-- 或
TRUNCATE TABLE log_table; -- 如为日志表且已备份
场景C:慢查询堆积
-- 1. 识别慢查询
SELECT pid, usename, query_start, query
FROM ux_stat_activity
WHERE state = 'active' AND now() - query_start > interval '5 minutes';
-- 2. 分析执行计划
EXPLAIN (ANALYZE, BUFFERS) SELECT ...; -- 复制慢查询
-- 3. 紧急终止(如确认可中断)
SELECT ux_cancel_backend(pid); -- 温和取消
-- 或
SELECT ux_terminate_backend(pid); -- 强制终止
-- 4. 长期优化:创建索引或优化SQL
-- 参考《系统管理手册》第3.7章查询优化
附录A:一页纸命令速查
实例生命周期
initdb -D /path/data # 创建
ux_ctl start -D /path/data -l logfile # 启动
ux_ctl stop -D /path/data -m fast # 停止
ux_ctl restart -D /path/data # 重启
ux_ctl reload -D /path/data # 重载配置
removedb -D /path/data # 删除
数据库对象
-- 数据库
createdb dbname; dropdb dbname;
\l \c dbname
-- 用户
createuser username; dropuser username;
\du
-- 表/索引
\dt \d table \di
CREATE INDEX; REINDEX; DROP INDEX;
-- 模式
\dn CREATE SCHEMA; DROP SCHEMA;
-- 表空间
\db CREATE TABLESPACE; DROP TABLESPACE;
权限矩阵
对象类型 常用权限 授予命令
─────────────────────────────────────────────────────────
数据库 CONNECT, CREATE GRANT ... ON DATABASE
模式 USAGE, CREATE GRANT ... ON SCHEMA
表 SELECT, INSERT GRANT ... ON TABLE
UPDATE, DELETE
ALL (所有权限)
列 SELECT, INSERT, UPDATE GRANT ... ON TABLE(col)
函数 EXECUTE GRANT ... ON FUNCTION
序列 USAGE, SELECT, UPDATE GRANT ... ON SEQUENCE