导入数据
CloudBase PostgreSQL 可以通过 DMC、SQL 脚本、PostgreSQL 工具或业务程序导入数据。选择方式时,需要考虑数据量、停机窗口、索引影响和回滚方案。
导入方式
| 方式 | 适用场景 |
|---|---|
| DMC 导入导出 | 少量表数据、开发测试、人工操作 |
| SQL 文件 | 初始化表结构、种子数据、可审计变更 |
pg_dump / pg_restore | 从已有 PostgreSQL 迁移 |
| 业务脚本批量写入 | 需要清洗、转换或调用外部接口的数据 |
导入前检查
导入前建议确认:
- 目标库 PostgreSQL 版本和扩展能力满足源库需求。
- 表结构、主键、外键、唯一约束和默认值已经准备好。
- RLS 策略不会阻止导入账号写入数据。
- 大表导入期间的索引、触发器和外键检查成本可接受。
- 已准备回滚方案,例如备份、临时表或可重复执行脚本。
使用 DMC 导入
DMC 适合导入 CSV、SQL 等文件,或在开发阶段做少量数据迁移。入口可参考 DMC 数据库管理。
导入后建议执行抽样检查:
select count(*) from public.orders;
select * from public.orders order by created_at desc limit 10;
使用 SQL 初始化
对于项目初始化数据,推荐将建表、索引、扩展和种子数据整理为 SQL 文件,便于代码评审和环境复现。
begin;
create table if not exists public.categories (
id bigint generated by default as identity primary key,
name text not null unique
);
insert into public.categories (name)
values ('default')
on conflict (name) do nothing;
commit;
从 PostgreSQL 迁移
从已有 PostgreSQL 迁移时,可以使用 pg_dump 导出,再使用 pg_restore 或 psql 导入。
pg_dump "$SOURCE_DATABASE_URL" \
--format=custom \
--no-owner \
--file=backup.dump
pg_restore \
--dbname="$TARGET_DATABASE_URL" \
--no-owner \
--clean \
--if-exists \
backup.dump
如果只迁移部分表,可以使用 --table 指定范围。生产迁移前应先在测试环境演练完整流程。
大数据量导入建议
- 分批导入,避免单个事务过大。
- 导入前评估是否临时禁用非必要索引或触发器。
- 导入后执行
analyze更新统计信息。 - 对重要表做行数、主键范围、金额汇总等校验。
- 在低峰期操作,并保留源数据直到验证完成。
analyze public.orders;
导入后的权限检查
数据导入完成后,应验证普通用户是否只能访问授权数据。
select count(*)
from public.orders
where user_id is null;
如果表启用了 RLS,需要确认导入数据中的归属字段与策略一致。权限策略配置请参考 基础权限。