如何为 PostgreSQL 生成测试数据(2 种方法)
Source: Dev.to

需要为你的 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"
}
]
无需任何配置。像 email、phone、first_name、company_name 这样的列名会被自动识别,并填充相应的数据。
为什么不直接使用生产数据?
将生产数据复制到开发环境会产生问题:
- 安全风险 – 非生产环境中的个人身份信息(PII)
- 合规问题 – GDPR、HIPAA、SOC 2 违规
- DevOps 开销 – VPC 对等连接、访问控制、数据掩码
- 数据陈旧 – 生产副本会过时
DDL to Data 生成的生产形态数据不存在上述任何问题。数据看起来真实,但并未关联真实人物。
为什么不直接使用 Faker?
Faker 库可以工作,但需要:
- 将每一列映射到正确的生成器
- 编写并维护种子脚本
- 当模式更改时更新脚本
- 手动连接外键关系
DDL to Data 会自动处理这些。你的模式已经定义了结构——我们只需读取它。
Source: …
PostgreSQL‑特定功能
数据类型支持
完整支持 PostgreSQL 类型:
SERIAL、BIGSERIAL、SMALLSERIALVARCHAR、TEXT、CHARINTEGER、BIGINT、SMALLINTNUMERIC、DECIMAL、REAL、DOUBLE PRECISIONBOOLEANDATE、TIME、TIMESTAMP、TIMESTAMPTZUUIDJSON、JSONB
外键关系
定义关系并获取引用完整的数据:
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 行。