Escribí un script bat para ejecutar la herramienta de copia de seguridad y restauración de Postgres.
Tengo un pequeño problema con el flujo de restauración: funciona bien mientras exista mi base de datos. Pero si no, fallará. Mi comando de restauración:
"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"
Entonces necesito modificar ese comando de alguna manera que manejará también un caso de uso en el que la base de datos "mydb" no existe, y crearla en tal caso.
simplemente agregar el indicador -C no funcionará en ese caso.
¿Cualquier sugerencia?
Debería funcionar usando postgres://postgres:1234@127.0.0.1:9195/postgres y agregando -C . Obviamente prueba en instancia desechable. Esto se conectará a la base de datos de postgres DROP DATABASE IF EXISTS mydb; , luego CREATE DATABASE mydb , conéctese a mydb y luego restaure los objetos de la base de datos.
Demostrar:
\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)