2014-12-22 39 views
0

我有一個PostgreSQL數據庫,我的應用程序使用VB.NET編碼,爲了我的目的,我通過備份orginladb將我的數據庫(名爲orginladb)複製到同一臺服務器中,創建新的數據庫(orginladb_copy)和恢復orginladborginladb_copyPostgreSQL:使用單一功能在同一服務器上覆制數據庫

我已經寫了4個獨立的代碼BakcupDrop DBCreate DBRestore,以下是方法

/* 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是如何在一個步驟中將原始數據庫複製到同一臺服務器或使用一個單一的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; 

使用「命令行」還沒有一個較短的方式,比你一個張貼,我想。

相關問題