暂无图片
暂无图片
9
暂无图片
暂无图片
暂无图片

大年初一值班记:当重庆DBA在客户现场“捞”数据库的底料配方


大年初一值班记:当重庆DBA在客户现场“捞”数据库的底料配方


开场:雾都客户现场的“新年交响”

大年初一,重庆解放碑的钟声穿透晨雾,而我——一个穿着羽绒服缩在客户现场办公室角落的DBA——正对着满屏xshell代码苦笑。甲方领导的微信如约而至:

客户需求
“老师(重庆尊称),把生产库的‘底料配方’导一份出来嘛!就是那个建库的原始脚本,我们审计要用。”

我盯着“底料配方”四个字,嗦了一口手边的泡面,心想:“这年过得巴适,数据库都要讲江湖规矩。”


MySQL老饕的“翻车现场”

甲方技术小哥凑过来支招:“老师,MySQL不是有个SHOW CREATE DATABASE迈?搞快试试撒!” 我礼貌微笑,手上却诚实地在PostgreSQL里敲下:

SHOW CREATE DATABASE hotpot_db;

屏幕瞬间弹出一行无情的报错:

ERROR: syntax error at or near "SHOW"

空气突然安静。屏幕的光亮映在小哥脸上,我仿佛听到PG在说:“哥子,重庆火锅和潮汕牛肉锅能一样嗦?” 🌶️


方法一:DBA的“九宫格秘籍”——pg_dump --create

🔥 核心武器

pg_dump -U dba_chongqing --schema-only --create -d hotpot_db > hotpot_recipe.sql

🍜 技术分解

  • --create:生成CREATE DATABASE语句(相当于火锅店的营业执照)
  • --schema-only:只捞红汤不要菜(只要结构不要数据)
  • 输出彩蛋:自动带\connect切换(PG:“给你整个微辣中辣鸳鸯锅选项!”)

📜 文件片段鉴赏

-- 数据库的"锅底配方" CREATE DATABASE hotpot_db WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'zh_CN.UTF-8' -- 按拼音排序(重庆人念"编码"为"bian ma") LC_CTYPE = 'zh_CN.UTF-8'; -- 认得到火锅生僻字"燚" \connect hotpot_db -- 自动跳转到红汤区 -- 此处省略毛肚表、鸭血视图、脑花索引的"涮煮指南"

方法二:系统表的“梯坎考古”——适合硬核DBA

正当我准备优雅收工时,甲方领导发来语音:
“老师,客户生产网段封闭,命令行工具用不起哈,直接写SQL搞一哈嘛!”

我默默收起泡面碗——这是要在系统表里爬坡上坎啊!


🛠️ 硬核操作手册

STEP 1:查户口(系统表三连JOIN)

SELECT datname AS "店名", rolname AS "掌柜", pg_encoding_to_char(encoding) AS "锅底编码", datcollate AS "菜品摆盘规则", datctype AS "筷子使用规范", spcname AS "灶台位置", CASE WHEN datconnlimit = -1 THEN '不限号' ELSE '排队' || datconnlimit || '桌' END AS 客流量控制 FROM pg_database db JOIN pg_roles r ON db.datdba = r.oid LEFT JOIN pg_tablespace ts ON db.dattablespace = ts.oid WHERE datname = 'hotpot_db';

输出示例:

店名      | 掌柜     | 锅底编码 | 菜品摆盘规则  | 筷子使用规范  | 灶台位置   | 客流量控制
----------|---------|---------|--------------|--------------|------------|-----------
hotpot_db | postgres| UTF8    | zh_CN.UTF-8  | zh_CN.UTF-8  | pg_default | 不限号

STEP 2:手动拼装“非遗配方”

CREATE DATABASE hotpot_db OWNER = postgres -- 掌柜必须写对 ENCODING = 'UTF8' -- 锅底必须红汤 LC_COLLATE = 'zh_CN.UTF-8' -- 毛肚要比白菜先下 LC_CTYPE = 'zh_CN.UTF-8' -- 认得到"嘞是雾都" TABLESPACE = pg_default -- 灶台就在解放碑 CONNECTION LIMIT = -1 -- 洪崖洞级客流量 IS_TEMPLATE = false; -- 不开连锁店

为什么PostgreSQL这么“拽实”?

两地数据库哲学对比:

行为 MySQL PostgreSQL
获取DDL 直接给配方(SHOW CREATE 先考厨师证再给秘方(系统表JOIN)
设计理念 “鸳鸯锅也行嘛” “微辣是底线,中辣才入门”

PG仿佛叼着牙签的火锅店老板:“兄弟,pg_dump是给熟客的VIP通道,系统表才是老师傅的案板功夫!”


甲方的“魔鬼需求”

当我提交两份方案后,办公室突然灯光一暗——跳闸了。重启后收到甲方微信:
“老师,这个LC_COLLATE能不能改成chongqing.UTF-8?我们数据要按‘一环路内、二环路外’排序!”

我(默默打开应急灯):
“领导,这个需求…怕是要等Unicode联盟开两会哦!” 💡


谨以此文献给所有春节坚守机房的DBA

最后修改时间:2025-02-05 09:58:56
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论