如何使用pg_restore将数据迁移至结构不同的feed_items表?
用pg_dump+SQL适配完成feed_items表数据迁移
由于源表和目标表存在列名映射差异、冗余列(源表title_vector/summary_vector目标表无)、唯一约束区别,直接用pg_restore全量还原会报错,需按以下步骤处理:
步骤1:导出源表纯数据(不含结构)
使用pg_dump导出源数据库中feed_items的仅数据,并生成INSERT语句(便于后续修改列对应关系):
pg_dump -d 源数据库名称 -t public.feed_items --data-only --inserts --no-owner > feed_items_data_raw.sql
参数说明:
--data-only:仅导出数据,不包含表结构定义--inserts:生成INSERT语句而非COPY命令,方便调整列映射--no-owner:不导出表所属用户信息,避免目标库权限冲突
步骤2:修改SQL适配目标表结构
需要调整INSERT语句的列映射、移除无用列、添加冲突处理:
2.1 替换列名映射
将源表列名替换为目标表对应列:
sed -i 's/INSERT INTO public.feed_items(feed_item_id, pubdate, link, guid, title, summary, content, author, feed_id, tags, title_vector, summary_vector)/INSERT INTO public.feed_items(id, pubdate, link, guid, title, summary, content, author, feed, tags)/' feed_items_data_raw.sql
核心映射关系:
- 源表
feed_item_id→ 目标表id(主键列) - 源表
feed_id→ 目标表feed(外键列) - 移除源表的
title_vector、summary_vector(目标表无此列)
2.2 移除VALUES中的无用列值
源表导出的VALUES包含title_vector和summary_vector的值,需删除这两个冗余值:
# 适配tsvector类型导出格式,删除末尾两个向量值 sed -i 's/, to_tsvector[^)]*, to_tsvector[^)]*)//' feed_items_data_raw.sql
如果导出的向量是字符串形式,可改用:
sed -i 's/, '\''[^'\'']*'\'', '\''[^'\'']*'\''\)/)/' feed_items_data_raw.sql
2.3 添加冲突规避(可选)
目标表对link字段有唯一约束,为避免重复链接导致导入失败,给每个INSERT添加冲突忽略逻辑:
sed -i 's/);/ ON CONFLICT (link) DO NOTHING;/' feed_items_data_raw.sql
步骤3:导入处理后的数据到目标库
使用psql将修改后的SQL导入目标数据库:
psql -d 目标数据库名称 -U ch_api_user -f feed_items_data_raw.sql
注意:确保ch_api_user拥有目标库feed_items表的插入权限。
可选优化:批量导入提速
若250k数据导入较慢,可临时关闭目标表的索引和约束(导入完成后恢复):
-- 导入前在目标库执行 ALTER TABLE public.feed_items DISABLE TRIGGER ALL; DROP INDEX IF EXISTS feed_items_searchable, feed_items_tags, feed_items_pubdate_id;
导入完成后恢复:
-- 导入后在目标库执行 CREATE INDEX IF NOT EXISTS feed_items_pubdate_id ON public.feed_items USING btree (pubdate DESC NULLS FIRST, id DESC NULLS FIRST); CREATE INDEX IF NOT EXISTS feed_items_searchable ON public.feed_items USING gin (searchable); CREATE INDEX IF NOT EXISTS feed_items_tags ON public.feed_items USING gin (tags); ALTER TABLE public.feed_items ENABLE TRIGGER ALL;
内容的提问来源于stack exchange,提问作者PirateApp
相关产品推荐
相关产品推荐

