如何为 PostgreSQL 生成测试数据(2 种方法)

发布: (2026年1月11日 GMT+8 10:27)
5 min read
原文: Dev.to

Source: Dev.to

Cover image for How to Generate Test Data for PostgreSQL (2 Methods)

需要为你的 PostgreSQL 数据库生成真实的测试数据吗?这里提供两种方法——挑选最适合你的工作流的那一种。

为 PostgreSQL 生成测试数据不应该需要复制生产数据或编写自定义 Faker 脚本。无论你是需要快速的演示数据集,还是在 CI/CD 流水线中进行自动化数据生成,都有更快捷的方式。

两种生成 PostgreSQL 测试数据的方法

1. 仪表盘(无需代码)

适用场景: 快速演示、手动测试、非技术用户

Generate PostgreSQL Test Data — No Code Guide →

可视化仪表盘可以让你:

  • 粘贴 PostgreSQL DDL 并立即生成数据
  • 下载为 JSON、CSV 或 SQL
  • 保存模式以便重复使用
  • 基础使用无需 API 密钥

当你需要立刻获取数据且不想编写任何代码时,这种方式非常合适。

2. REST API(用于自动化)

适用场景: CI/CD 流水线、自动化测试、开发者工作流

PostgreSQL Test Data API for CI/CD →

REST API 提供:

  • 编程式数据生成
  • 与 GitHub Actions、CircleCI、Jenkins 集成
  • 在测试环境中进行数据库种子填充
  • 一致且可重复的测试数据

适合希望将测试数据生成深度嵌入开发工作流的团队。

工作原理

DDL to Data 读取你的 PostgreSQL 模式,并根据列名推断出真实的值:

CREATE TABLE customers (
  id SERIAL PRIMARY KEY,
  first_name VARCHAR(50),
  last_name VARCHAR(50),
  email VARCHAR(100) UNIQUE,
  phone VARCHAR(20),
  company_name VARCHAR(100),
  created_at TIMESTAMP DEFAULT NOW()
);

它会自动生成如下 JSON:

[
  {
    "id": 1,
    "first_name": "Sarah",
    "last_name": "Chen",
    "email": "sarah.chen@techcorp.io",
    "phone": "+1-555-234-5678",
    "company_name": "Nexus Industries",
    "created_at": "2024-03-15T09:23:41"
  },
  {
    "id": 2,
    "first_name": "Marcus",
    "last_name": "Johnson",
    "email": "m.johnson@startup.com",
    "phone": "+1-555-876-5432",
    "company_name": "Velocity Labs",
    "created_at": "2024-03-14T14:56:12"
  }
]

无需任何配置。像 emailphonefirst_namecompany_name 这样的列名会被自动识别,并填充相应的数据。

为什么不直接使用生产数据?

将生产数据复制到开发环境会产生问题:

  • 安全风险 – 非生产环境中的个人身份信息(PII)
  • 合规问题 – GDPR、HIPAA、SOC 2 违规
  • DevOps 开销 – VPC 对等连接、访问控制、数据掩码
  • 数据陈旧 – 生产副本会过时

DDL to Data 生成的生产形态数据不存在上述任何问题。数据看起来真实,但并未关联真实人物。

为什么不直接使用 Faker?

Faker 库可以工作,但需要:

  • 将每一列映射到正确的生成器
  • 编写并维护种子脚本
  • 当模式更改时更新脚本
  • 手动连接外键关系

DDL to Data 会自动处理这些。你的模式已经定义了结构——我们只需读取它。

Source:

PostgreSQL‑特定功能

数据类型支持

完整支持 PostgreSQL 类型:

  • SERIALBIGSERIALSMALLSERIAL
  • VARCHARTEXTCHAR
  • INTEGERBIGINTSMALLINT
  • NUMERICDECIMALREALDOUBLE PRECISION
  • BOOLEAN
  • DATETIMETIMESTAMPTIMESTAMPTZ
  • UUID
  • JSONJSONB

外键关系

定义关系并获取引用完整的数据:

CREATE TABLE orders (
  id SERIAL PRIMARY KEY,
  customer_id INTEGER REFERENCES customers(id),
  total DECIMAL(10,2),
  status VARCHAR(20)
);

生成的 customer_id 值将匹配 customers 表中有效的 id 值。

受约束的限制

  • NOT NULL – 必须填充
  • UNIQUE – 不允许重复值
  • CHECK – 在可能的情况下遵守约束

入门

  • 尝试仪表板: 粘贴您的模式,即可即时获取数据。
  • 使用 API: 每月免费 50,000 行。

接下来:了解 无代码仪表板使用API 集成 的具体步骤。

Back to Blog

相关文章

阅读更多 »

SQLite 中的系统事务到用户事务

用户事务:逃离自动提交 默认情况下,SQLite 运行在 autocommit 模式。每个非 SELECT 语句都会被包装在它自己的事务中:!Autocommit tr...