为什么我构建了DDL to Data

发布: (2026年1月4日 GMT+8 01:29)
7 分钟阅读
原文: Dev.to

Source: Dev.to

请提供您希望翻译的具体文本内容,我将为您翻译成简体中文。

问题

我一直看到的情况是:

管理层需要在周五前准备好演示。销售向客户承诺他们会看到带有“真实”数据的产品。于是有人建议直接从生产环境拉取数据。

现在 DevOps 很不满。安全团队想知道我们为什么需要在生产和预演之间进行 VPC 对等连接。有人必须赶紧对 PII 进行脱敏。DBA 被拉进会议。原本的“快速演示”变成了涉及三个团队和四个 Slack 频道的两周项目。

这一切都因为我们需要一些看起来真实的数据。

不仅仅是演示。每个新开发者入职都需要一个已填充的数据库。每个 QA 周期都需要全新的测试数据。每次预演环境的刷新都变成了生产环境的复制。

答案总是一样的:“我们能直接复制生产吗?”

不行。 你不能这样做。

替代方案糟透了

Faker 库

如果你有时间为每一列接线、编写样板代码并维护脚本,这倒是可以。你需要把 email 映射到 faker.email()phone 映射到 faker.phone()created_at 映射到 faker.date()。每个表都要这么做。每次模式变更都要重新处理。

在演示定在星期四的情况下,没人有这么多时间。

提示 LLM?

当然可以——但它每次的格式可能不一样,导致你的测试因为输出结构变化而频繁失效;又或者你为每次 CI 运行都要付费,流水线还要依赖 OpenAI 的可用性。

复制生产数据?

想要通过安全审查可真是好运。即使成功了,你仍然要为开发环境中存放的客户 PII 负责。一次意外的日志、一次错误报告中的截图,就可能引发合规事故。

这些方案都不适合这个简单的需求:“我需要真实的数据,但不能是生产数据”。

实现

架构已经定义了数据应有的样子。

  • email VARCHAR(100) → 一个电子邮件
  • phone VARCHAR(20) → 一个电话号码
  • created_at TIMESTAMP → 一个时间戳
  • first_name VARCHAR(50) → 一个名字

结构就在 DDL 中。为什么要与安全对抗、请求 DevOps 并冒合规风险,只是为了获取架构本可以已经描述的数据?

我不需要生产数据。我需要 生产形态的数据

我构建的内容

DDL to Data 可以读取你的 CREATE TABLE 语句,瞬间生成逼真的数据。

  1. 粘贴你的模式。
  2. 获得 JSON 结果。
  3. 邮箱看起来像邮箱,电话号码看起来像电话号码,姓名看起来像姓名——全部自动从列名推断。
  • 不需要生产环境访问。
  • 不需要 VPC 对等连接。
  • 不涉及个人身份信息(PII)问题。
  • 不需要安全审查。
  • 确定性的模式匹配——相同的模式每次都会得到相同的输出。
  • 足够快用于 CI/CD(毫秒级,而非秒级)。
CREATE TABLE users (
  id SERIAL PRIMARY KEY,
  first_name VARCHAR(50),
  last_name VARCHAR(50),
  email VARCHAR(100),
  phone VARCHAR(20),
  created_at TIMESTAMP
);
[
  {
    "id": 1,
    "first_name": "Sarah",
    "last_name": "Chen",
    "email": "sarah.chen@techstartup.io",
    "phone": "+1-555-234-5678",
    "created_at": "2024-03-15T09:23:41"
  },
  {
    "id": 2,
    "first_name": "Marcus",
    "last_name": "Johnson",
    "email": "m.johnson@company.com",
    "phone": "+1-555-876-5432",
    "created_at": "2024-03-14T14:56:12"
  }
]

无需设置。无需配置。无需向工程师提供提示。

适用对象

  • 需要演示数据但不想处理安全麻烦的团队
  • 不应触及生产环境的开发环境
  • 需要真实数据而不是到处都是 test@test.comJohn Doe 的 QA 工程师
  • 需要一致且快速生成数据的 CI/CD 流水线
  • 曾经在会议上被管理层问“为什么不能直接复制生产数据?”的任何人

如果你曾经花更多时间获取测试数据,而不是实际进行测试,那么这篇内容适合你。

接下来

  • Story Mode – 描述您想要的情景,数据会相应适配。示例:“一家快速增长的 B2B SaaS,拥有企业客户并有部分流失账户”,或“一个具有季节性假日趋势的电子商务店”。数据会讲述连贯的故事,而不是随机的。
  • Direct Database Seeding – 跳过复制粘贴。将 DDL 直接连接到您的 PostgreSQL 数据库,并一键填充表格。无需触及生产环境即可为预演环境种子数据。

试一试

如果你曾经在“我们需要真实数据”和“我们不能触碰生产环境”之间左右为难,这正是我为此构建的工具。

免费层。无需信用卡。只需粘贴你的模式并查看输出。

尝试 DDL 转数据 →

由 Travis 构建。有问题或反馈?请通过 或在 X 上联系 @DDLTODATA

Back to Blog

相关文章

阅读更多 »

RGB LED 支线任务 💡

markdown !Jennifer Davishttps://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%...

Mendex:我为何构建

介绍 大家好。今天我想分享一下我是谁、我在构建什么以及为什么。 早期职业生涯与倦怠 我在 17 年前开始我的 developer 生涯……