我的测试在一台linux服务器,我的正式库是腾讯云轻服务器,使用docker上配置的PG

因为我的测试环境在172这台服务器上,现在我想把表结构和数据复制到云服务器上
测试导入整个库:
pg\dump -h 172.26.1.XXX -p 5432 -U chen -d aikb -Fc | pg\restore -h 124.223.XXX.XXX -p 5432 -U chen -d aikb --no-owner --no-acl
发生以下问题
PS C:\\Users\\mis> pg\dump -h 172.26.1.XXX -p 5432 -U chen -d aikb -Fc | pg\restore -h 124.223.XXX.XXX -p 5432 -U chen -d aikb --no-owner --no-acl
口令:
pg\_restore: 错误: 无法从输入文件中读取:文件的结尾
看来直接使用一个命令无法完成了,很大可能是wondows的管道直传有问题
第一步:导出备份到本地文件
改为:
pg_dump -h 172.26.1.99 -p 5432 -U chen -d aikb -Fc -f D:\aikb_backup.dump先导出为备份文件,在恢复到目标库前我们一般要校验合法性,使用命令:pg\restore -l D:\\aikb\backup.dump
这条命令列出归档内容,如果正常输出 toc 列表,代表备份完好;如果这里直接报 EOF,说明导出本身就失败了。
第二步:恢复到目标库
pg_restore -h 124.223.XX.XXX -p 5432 -U chen -d aikb --no-owner --no-acl D:\aikb_backup.dump
在导入时出现了错误,大概意思是正式库中已有相同的表,不能直接创建,因为我们的正式库目前还没有重要的数据,因此我可以先清除所有的表和数据再重新导入,当然也可以忽略掉这些已存在表,不去操作它,因为我没有什么重要的数据,因此我就先全部清除,然后再重新导入
PS C:\\Users\\mis> pg\restore -h 124.223.XX.XXX -p 5432 -U chen -d aikb --no-owner --no-acl --clean D:\\aikb\backup.dump
风险提示:--clean 会删掉目标 aikb 库里面所有表和数据!目标库原有数据会全部丢失,确认不需要旧数据再执行。
额外重点(pgvector 必须注意)
目标库要提前确认pgvector 扩展已经安装并创建,否则恢复完向量字段会报错:
-- 在目标库执行
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";如果没装扩展,就算表建成功,vector(512)、uuidgeneratev4()会报错。
执行完之后校验命令
恢复完成后,连接目标库执行,核对表数量、行数:
select count(*) from kb_document;
select count(*) from vector_store;补充小提示
如果执行 --clean 后依然报部分对象残留,可以先手动清库:
DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
GRANT ALL ON SCHEMA public TO public;这条会清空 public schema 全部表,谨慎!