限制因素:
本文档仅限于迁移 viking://resources 等公共目录数据或本人(user) 目录下的私有数据;
迁移的数据规模受限于云上版本的数据导入限制,建议单次迁移的数据量不超过 100MB。
本地源端创建的 user id 必须为 default。
后续命令默认使用以下环境变量:
# 需要迁移的服务地址 export SOURCE_URL="http://localhost:1933" # serverless 服务地址 export TARGET_URL="https://api.vikingdb.cn-beijing.volces.com/openviking" # 源端使用 account API Key。 export SOURCE_API_KEY="<source-account-admin-key>" # 目标端使用 account API Key。 export TARGET_API_KEY="<remote-account-admin-key>" export EXPORT_DIR="./exports" mkdir -p "${EXPORT_DIR}"
curl -sS -X POST "${SOURCE_URL}/api/v1/pack/backup" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${SOURCE_API_KEY}" \ -d '{"include_vectors": false}' \ --output "${EXPORT_DIR}/openviking-local.ovpack"
说明:使用
--output参数后,响应内容直接写入文件,终端无返回。
TARGET_TEMP_FILE_ID=$( curl -sS -X POST "${TARGET_URL}/api/v1/resources/temp_upload" \ -H "X-API-Key: ${TARGET_API_KEY}" \ -F "file=@${EXPORT_DIR}/openviking-local.ovpack" \ | jq -r ".result.temp_file_id" ) echo "${TARGET_TEMP_FILE_ID}"
返回示例:
upload_xxxxxxxxxxxxxxxxxxxxxxxx.ovpack
说明:使用
jq解析后,终端只会显示提取的temp_file_id。如果没有安装jq,可以直接查看上传接口响应 JSON,手动取出result.temp_file_id字段。
curl -sS -X POST "${TARGET_URL}/api/v1/pack/restore" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${TARGET_API_KEY}" \ -d "{ \"temp_file_id\": \"${TARGET_TEMP_FILE_ID}\", \"on_conflict\": \"overwrite\" }"
返回示例:
{"status":"ok","result":{"uri":"viking://"},"error":null,"telemetry":null,"profile":null}
适用于只迁移某个目录,例如:
viking://resources/my-project
curl -sS -X POST "${SOURCE_URL}/api/v1/pack/export" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${SOURCE_API_KEY}" \ -d '{ "uri": "viking://resources/my-project", "include_vectors": false }' \ --output "${EXPORT_DIR}/my-project.ovpack"
说明:使用
--output参数后,响应内容直接写入文件,终端无返回。
TARGET_TEMP_FILE_ID=$( curl -sS -X POST "${TARGET_URL}/api/v1/resources/temp_upload" \ -H "X-API-Key: ${TARGET_API_KEY}" \ -F "file=@${EXPORT_DIR}/my-project.ovpack" \ | jq -r ".result.temp_file_id" ) echo "${TARGET_TEMP_FILE_ID}"
返回示例:
upload_xxxxxxxxxxxxxxxxxxxxxxxx.ovpack
说明:使用
jq解析后,终端只会显示提取的temp_file_id。如果没有安装jq,可以直接查看上传接口响应 JSON,手动取出result.temp_file_id字段。
curl -sS -X POST "${TARGET_URL}/api/v1/pack/import" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${TARGET_API_KEY}" \ -d "{ \"temp_file_id\": \"${TARGET_TEMP_FILE_ID}\", \"parent\": \"viking://resources/\", \"on_conflict\": \"overwrite\" }"
返回示例:
{"status":"ok","result":{"uri":"viking://resources/my-project"},"error":null,"telemetry":null,"profile":null}
注意:
parent必须是导出目录的父目录。例如导出viking://resources//my-project时,parent应为viking://resources。