如果不存在通过 postgres 备份和恢复工具创建数据库的问题
problem with create database if not exist via postgres backup and restore tool
我写了一个 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”不存在的用例,并在这种情况下创建它。
在这种情况下,仅添加 -C 标志是行不通的。
有什么建议吗?
应该通过使用 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)
我写了一个 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”不存在的用例,并在这种情况下创建它。
在这种情况下,仅添加 -C 标志是行不通的。
有什么建议吗?
应该通过使用 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)