gpt4 book ai didi

postgresql - 如果不存在通过 postgres 备份和恢复工具创建数据库的问题

转载 作者:行者123 更新时间:2023-12-04 17:10:09 25 4
gpt4 key购买 nike

我写了一个 bat 脚本来执行 Postgres 备份和恢复工具。

我对还原流程有一点疑问:只要我的数据库存在,它就可以正常工作。但如果不这样做,它将失败。我的恢复命令:

"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"

所以我需要以某种方式修改该命令,以处理数据库“mydb”不存在的用例,并在这种情况下创建它。

在这种情况下,仅仅添加 -cflags是行不通的。

有什么建议吗?

最佳答案

应该通过使用 postgres://postgres:1234@127.0.0.1:9195/postgres 并添加 -C 来工作。显然是在丢弃实例上进行测试。这将连接到 postgres 数据库 DROP DATABASE IF EXISTS mydb; ,然后 CREATE DATABASE mydb,连接到 mydb 然后恢复数据库对象。

演示:

\l test_db
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
------+-------+----------+---------+-------+-------------------
(0 rows)

pg_restore -d postgres -c -C -U postgres test_db.out
pg_restore: while PROCESSING TOC:
pg_restore: from TOC entry 4734; 1262 1170111 DATABASE test_db postgres
pg_restore: error: could not execute query: ERROR: database "test_db" does not exist
Command was: DROP DATABASE test_db;
pg_restore: warning: errors ignored on restore: 1

\l test_db
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
---------+----------+----------+-------------+-------------+-------------------
test_db | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
(1 row)

pg_restore -d postgres -c -C -U postgres test_db.out

\l test_db
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
---------+----------+----------+-------------+-------------+-------------------
test_db | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
(1 row)

关于postgresql - 如果不存在通过 postgres 备份和恢复工具创建数据库的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69622263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com