为Windows创建PostgreSQL恢复批处理文件,无法获取正确的参数

问题描述 投票:0回答:1

我正在为在 Windows 2022 上运行 PostgreSQL 的服务器创建备份脚本。

我对 Postgres 相当陌生,我一直在搜索这个,直到我脸色发青,但当我运行脚本时,我的开关似乎相互矛盾。

这是我到目前为止的脚本:

@echo off
cls

set PGHOST=localhost
set PGUSER=someuser
set PGPASSWORD=somepassword
set PGPORT=5432
set PGDB=gitlab

echo This script will restore a PostgreSQL database dump file.
set /p "dmpfile=Enter dump file name to restore:      "
set /p "pgdb=Enter the new database name (gitlab): "
if "%pgdb%" equ "" set "pgdb=gitlab"

echo.
echo Importing %dmpfile% into database %pgdb%
echo.

echo off

echo Creating database %pgdb%
echo.
createdb -h %pghost% -p %pgport% -U %pguser% -T template0 %pgdb%

echo.
echo Importing %dmpfile%
echo.
pg_restore --create --dbname %pgdb% %dmpfile%

如果我没有 createdb 行,我会收到以下消息:

pg_restore:错误:连接到“localhost”(::1)的服务器,端口 5432 失败:致命:数据库“gitlab”不存在

如果我使用 createdb 创建数据库,那么当恢复运行时,我会收到以下消息:

pg_restore:错误:无法执行查询:错误:数据库“gitlab”已存在 命令是:使用模板创建数据库 gitlab = template0 ENCODING = 'UTF8' LOCALE_PROVIDER = libc LOCALE = 'English_United States.1252';

我不明白。如果我创建它,它会说它已经存在,如果我不创建它,它会抱怨它不存在。

我做错了什么?

postgresql batch-file windows-server-2022
1个回答
0
投票

当您对 pg_restore 使用 --create 时,在命令行上指定的数据库是连接到的“实用程序”数据库,以便执行 CREATE DATABASE 命令。这通常是“postgres”或“template1”。在这种情况下,要创建和恢复的数据库的名称来自转储文件中,未在命令行上指定。

因此,要么预先创建数据库,但不要使用 --create,并指定要恢复到的预先创建的数据库的名称。或者不预先创建数据库并使用 --create,但随后指定不同的已存在实用程序数据库的名称。

如果您希望恢复的数据库名称与最初转储的名称不同,那么您必须使用第一个选项(或者之后重命名)

© www.soinside.com 2019 - 2024. All rights reserved.