热门角色不仅是灵感来源,更是你的效率助手。通过精挑细选的角色提示词,你可以快速生成高质量内容、提升创作灵感,并找到最契合你需求的解决方案。让创作更轻松,让价值更直接!
我们根据不同用户需求,持续更新角色库,让你总能找到合适的灵感入口。
本提示词专为数据库管理员和开发团队设计,通过结构化方法生成全面的数据库变更管理计划。它能有效识别变更风险、制定回滚策略、规划测试方案,并确保在不同环境下的平滑部署。特别适用于生产环境数据库迁移、版本升级等关键场景,可显著降低系统停机时间并保障数据安全。该工具支持多种数据库类型与环境配置,提供从需求分析到实施监控的完整解决方案。
——
附:关键操作与参数要点(经预生产验证后执行)
本方案确保先在预生产充分验证后再生产实施,遵循最小风险切换与可回滚原则,满足字符集统一、结构优化、审计与复制(含 GTID)目标。
以下为推荐的详细执行脚本与步骤(按检查点推进)
-- 表结构、索引、触发器、依赖对象清单
SELECT objid::regclass AS object, deptype, refobjid::regclass AS depends_on
FROM pg_depend WHERE objid = 'public.events'::regclass;
-- 外键/约束
SELECT conname, contype, conrelid::regclass AS on_table
FROM pg_constraint WHERE conrelid = 'public.events'::regclass;
-- 触发器
SELECT tgname, tgenabled, tgtype FROM pg_trigger
WHERE tgrelid = 'public.events'::regclass AND NOT tgisinternal;
-- 统计基线
SELECT now() ts, relname, n_live_tup, n_dead_tup, seq_scan, idx_scan
FROM pg_stat_user_tables WHERE relname = 'events';
-- 数据范围
SELECT min(created_at) AS min_ts, max(created_at) AS max_ts, count(*) AS cnt
FROM public.events;
CREATE EXTENSION IF NOT EXISTS pgaudit;
ALTER SYSTEM SET pgaudit.log = 'ddl, role, write';
ALTER SYSTEM SET pgaudit.log_relation = 'on';
SELECT pg_reload_conf();
若 pgaudit 不可用:对本次变更会话启用严格日志
SET log_statement = 'all';
SET log_min_duration_statement = 0;
-- 1) 创建新父表(暂名)
BEGIN;
CREATE TABLE public.events_new (LIKE public.events INCLUDING ALL);
-- 移除旧触发器相关的路由逻辑(如果 LIKE 包含了触发器,需删除)
-- 在父表上重建保留的业务触发器(非路由类),父表触发器将对分区生效
-- 示例:DROP TRIGGER IF EXISTS trg_route ON public.events_new;
-- 定义为分区表
ALTER TABLE public.events_new
PARTITION BY RANGE (created_at);
-- 默认分区,兜底越界写入
CREATE TABLE public.events_new_default
PARTITION OF public.events_new DEFAULT;
COMMIT;
DO $$
DECLARE
d_start date;
d_end date;
d date;
p text;
BEGIN
SELECT date_trunc('day', min(created_at))::date,
(date_trunc('day', max(created_at)) + interval '1 day')::date
INTO d_start, d_end
FROM public.events;
d := d_start;
WHILE d < d_end LOOP
p := format('public.events_y%sm%sd%s', to_char(d,'YYYY'), to_char(d,'MM'), to_char(d,'DD'));
EXECUTE format(
'CREATE TABLE IF NOT EXISTS %I PARTITION OF public.events_new FOR VALUES FROM (%L) TO (%L);',
p, d::timestamptz, (d + 1)::timestamptz
);
d := d + 1;
END LOOP;
END$$;
-- 角色
CREATE ROLE app_events_reader NOLOGIN;
CREATE ROLE app_events_writer NOLOGIN;
-- 将应用连接角色加入上述组角色(举例)
-- GRANT app_events_reader TO app_ro;
-- GRANT app_events_writer TO app_rw;
-- 父表授权
GRANT SELECT ON TABLE public.events_new TO app_events_reader;
GRANT INSERT, UPDATE, DELETE ON TABLE public.events_new TO app_events_writer;
-- 所有现有分区授权
DO $$
DECLARE r record;
BEGIN
FOR r IN SELECT inhrelid::regclass AS part
FROM pg_inherits WHERE inhparent = 'public.events_new'::regclass LOOP
EXECUTE format('GRANT SELECT ON TABLE %s TO app_events_reader;', r.part);
EXECUTE format('GRANT INSERT, UPDATE, DELETE ON TABLE %s TO app_events_writer;', r.part);
END LOOP;
END$$;
-- 示例:全量一次性迁移(staging 可接受)
INSERT INTO public.events_new
SELECT * FROM public.events;
-- 行数校验(总量)
SELECT (SELECT count(*) FROM public.events) AS before_cnt,
(SELECT count(*) FROM public.events_new) AS after_cnt;
-- 按日校验(抽样或全量)
WITH src AS (
SELECT date_trunc('day', created_at) d, count(*) c
FROM public.events GROUP BY 1
),
dst AS (
SELECT date_trunc('day', created_at) d, count(*) c
FROM public.events_new GROUP BY 1
)
SELECT s.d, s.c AS before_c, d.c AS after_c, (s.c - d.c) AS diff
FROM src s FULL JOIN dst d USING(d)
ORDER BY d;
-- 校验和(示例:基于主键和时间的稳定哈希;根据实际主键列名替换 id)
-- 注意:大表计算需监控资源
SELECT
(SELECT coalesce(bit_xor(hashtext(id::text || '|' || created_at::text)), 0) FROM public.events) AS before_crc,
(SELECT coalesce(bit_xor(hashtext(id::text || '|' || created_at::text)), 0) FROM public.events_new) AS after_crc;
如无内置 bit_xor,可改用 sum(hashtextextended(...)) % 2^63 近似校验。
-- 复合索引
CREATE INDEX idx_events_user_created ON public.events_new USING btree (user_id, created_at);
-- 部分索引(status='active')
CREATE INDEX idx_events_active_created ON public.events_new USING btree (created_at)
WHERE status = 'active';
-- 如需要:对特定查询增加覆盖列或方向(根据执行计划再定)
-- 示例:将报表函数改为并行安全(根据实际函数名/逻辑调整)
CREATE OR REPLACE FUNCTION public.rpt_daily_user_events(_d date)
RETURNS TABLE(user_id bigint, cnt bigint)
LANGUAGE sql
PARALLEL SAFE
AS $$
SELECT user_id, count(*)::bigint
FROM public.events_new
WHERE created_at >= _d::timestamptz
AND created_at < (_d + 1)::timestamptz
GROUP BY user_id
$$;
-- 并行计划验证
SET max_parallel_workers_per_gather = 4;
EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM public.rpt_daily_user_events(current_date - 1);
BEGIN;
-- 冻结写入(staging 可暂停写入服务;如需保序,可短暂停服)
-- SELECT pg_terminate_backend(pid) ... (不建议在演练中使用,推荐应用层停写)
ALTER TABLE public.events RENAME TO events_legacy;
ALTER TABLE public.events_new RENAME TO events;
-- 序列与默认值(如 id 为 bigserial)
-- 确保序列所有权与 nextval 继承正确,如需要:
-- 1) 查找旧序列名
-- 2) 将新表列默认值设置为 nextval('同名序列');并设置 OWNED BY
-- 示例(根据实际对象名调整):
-- ALTER SEQUENCE public.events_id_seq OWNED BY public.events.id;
-- ALTER TABLE public.events ALTER COLUMN id SET DEFAULT nextval('public.events_id_seq');
COMMIT;
-- 校正序列当前位置(防止主键冲突)
SELECT setval('public.events_id_seq',
(SELECT max(id) FROM public.events), true);
-- 索引使用统计
SELECT relname, indexrelname, idx_scan, idx_tup_read, idx_tup_fetch
FROM pg_stat_user_indexes
WHERE relname LIKE 'events%';
-- 分区裁剪是否生效
SET enable_seqscan = off;
EXPLAIN SELECT * FROM public.events
WHERE created_at >= current_date - interval '1 day'
AND created_at < current_date;
-- 部分索引命中(status='active')
EXPLAIN SELECT * FROM public.events
WHERE status='active'
AND created_at >= current_date - interval '7 day';
RESET enable_seqscan;
-- 应用只读角色验证
SET ROLE app_events_reader;
SELECT count(*) FROM public.events LIMIT 1;
RESET ROLE;
-- 应用写角色验证
SET ROLE app_events_writer;
INSERT INTO public.events (/*必要列*/) VALUES (/*测试数据*/);
ROLLBACK; -- 仅校验写权限不保留数据
RESET ROLE;
-- 审计日志在服务器端确认已产出(检查日志文件)
BEGIN;
-- 切回旧表名
ALTER TABLE public.events RENAME TO events_new_failed;
ALTER TABLE public.events_legacy RENAME TO events;
COMMIT;
-- 若切换窗口期间产生新数据(写入到了新表),需回填到旧表
INSERT INTO public.events
SELECT * FROM public.events_new_failed
WHERE created_at >= :cutover_ts; -- 切换时间戳(记录于变更单)
-- 恢复旧函数版本/旧索引(如有变更)
-- 关闭/回退审计设置至变更前状态(如有需要)
附:注意事项与版本要点
至此,方案能在预发布环境完成端到端可回滚的分区与索引改造演练,满足数据一致性、性能与合规要求。
——
附:关键实施要点与示例
本方案严格包含备份与恢复、量化验收门槛、回滚触发条件与执行步骤,所有改动均先在 testing 环境完成演练与验证,避免未经测试的变更进入生产路径。
快速生成生产变更的全流程方案,提前识别风险并准备回滚与备份,显著缩短停机窗口。
输入表结构或版本改动,自动得到测试与部署计划,统一沟通口径,降低升级返工。
规划预生产到生产的发布路径与检查清单,合理安排资源与窗口,上线后监控与告警即刻就位。
将高风险、跨团队的数据库变更流程,快速转化为一份可评审、可上线、可追踪的专业变更计划。面向生产迁移、版本升级、架构调整等关键场景,帮助团队在几分钟内生成覆盖需求分析、风险缓解、测试清单、部署步骤、回滚条件与监控指标的闭环方案。核心价值:显著降低停机与事故概率,压缩准备与沟通成本,提升审批通过率,保障合规与数据安全,让新手也能交付专家级方案、让专家更高效。
将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。
把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。
在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。
免费获取高级提示词-优惠即将到期