快速操作指南

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 memorySHMMAX不足参考《系统管理手册》2.3.1节调整内核参数
could not create semaphores信号量不足增加 SEMMNISEMMNS

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