Postgres备份恢复工具pg_restore无法自动创建不存在的数据库如何解决?
Postgres备份恢复自动创建目标库解决方案
你单独加-C参数不生效的核心原因是:当前命令中-d参数直接指向了目标库mydb,如果mydb不存在,pg_restore在建立连接的步骤就会直接失败,根本不会执行-C对应的建库逻辑。
以下是两种可行的解决方案:
方案1:直接调整pg_restore参数(无需额外脚本逻辑)
调整-d参数连接到默认存在的postgres系统库,搭配-C参数即可自动创建目标库:
"pg_restore.exe" -d postgres://postgres:1234@127.0.0.1:9195/postgres -w -c -C -v -F c --if-exists "DatabaseBackup_mydb.tar" 2>> "DatabaseRestore_mydb.log"
注意:该方案要求你使用的备份文件是
pg_dump导出的全库备份,包含CREATE DATABASE相关元信息。
方案2:bat脚本分步执行(可控性更高)
如果需要自定义数据库的编码、所有者、表空间等属性,或者备份文件不含建库信息,可以在恢复前先判断并创建目标库:
:: 检查mydb是否存在 "psql.exe" -d postgres://postgres:1234@127.0.0.1:9195/postgres -w -t -c "SELECT 1 FROM pg_database WHERE datname = 'mydb'" | findstr /r /c:"1" >nul :: 不存在则创建 if %errorlevel% neq 0 ( "psql.exe" -d postgres://postgres:1234@127.0.0.1:9195/postgres -w -c "CREATE DATABASE mydb OWNER postgres ENCODING 'UTF8'" ) :: 执行原有恢复逻辑 "pg_restore.exe" -d postgres://postgres:1234@127.0.0.1:9195/mydb -w -c -v -F c --if-exists "DatabaseBackup_mydb.tar" 2>> "DatabaseRestore_mydb.log"
内容的提问来源于stack exchange,提问作者Dekel tsairi
相关产品推荐
相关产品推荐

