2014-12-22 2 views
0

У меня есть база данных PostgreSQL, а мое приложение закодировано с помощью VB.NET. Для меня я копирую свою БД (так называемый orginladb) на том же сервере, беря резервную копию orginladb и создать новую БД (orginladb_copy) и восстановить orginladb в orginladb_copyPostgreSQL: копирование базы данных на одном сервере с использованием одной функции

Я написал 4 отдельный код для Bakcup, Drop DB, Create DB и Restore, Ниже методы

/* Backup */ 
-------- 
pg_dump --format=c --username "postgres" originaldb > "D:\Backup\originaldb .backup" 

/*Drop*/ 
------ 
psql -U postgres -d postgres -c "DROP DATABASE if exists "\"originaldb_Copy"\"" 

/*Create Copy Of Database*/ 
---------------------------- 
psql -U postgres -d postgres -c "CREATE DATABASE "\"originaldb_Copy"\"" 


/*Restore originaldb.backup to originaldb_Copy*/ 
--------------------------------------------------- 
pg_restore -d originaldb_Copy "D:\Backup\originaldb .backup" 

Так что мой Questio n - как скопировать исходный db на один и тот же сервер за один шаг или с помощью одного function?

ответ

1

вы можете создать метод в VB.NET как ниже

Private Sub copy_db() 
     Using conn As New NpgsqlConnection("connection_string") 
      Dim cmd As New NpgsqlCommand() 

      cmd.CommandText = "SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'Originaldb';" 
      cmd.ExecuteNonQuery() 

      cmd.CommandText = "drop database if exists ""Originaldb_Copy""" 
      cmd.ExecuteNonQuery() 

      cmd.CommandText = "CREATE DATABASE ""Originaldb_Copy"" WITH TEMPLATE ""Originaldb"" OWNER ""owner_name"";" 
      cmd.ExecuteNonQuery() 
     End Using 
    End Sub 

и вызвать эту функцию, когда вы хотите скопировать copy_db

0

Вы могли бы добиться этого с помощью запроса (однако, DROP должно быть сделано отдельно):

CREATE DATABASE originaldb_Copy WITH TEMPLATE originaldb; 

Использование «командной строки» есть не более короткий путь, чем тот, который вы опубликовано, я думаю.

Смежные вопросы