Postgresql

獲取遠端表數據並儲存到 pgSQL 中的本地轉儲文件中?

  • December 14, 2016

我想將一個表的內容從遠端機器複製到本地。我嘗試過使用psqlCommand \copy。它工作正常,因為“複製”由於從遠端複製而無法工作。

但是有沒有什麼方法我可以在沒有命令控制台的情況下做同樣的事情,並通過執行一個簡單的查詢c#並以程式方式執行它?我正在使用 Postgres 9.4

使用 C#,您可以擁有一個相對簡單的程序。例如,如果要寫入 CSV 文件,可以使用以下程式碼:

using System.IO;  /* We want to Write to the FileSystem */
using Npgsql;     /* Connection to PostgreSQL database */
using CsvHelper;  /* CSV writer - https://joshclose.github.io/CsvHelper/ */

namespace ConnectToDB
{
   class Program
   {
       const string connectionString = 
           "Server=localhost;" + 
           "Database=joanolo;" + 
           "User Id=user;" + 
           "Password=password;";
       const string fileName = "Output.csv";
       const string SQLCommand = "SELECT * FROM t";

       static void Main(string[] args)
       {
           /* Connect to the database */
           NpgsqlConnection DB = new NpgsqlConnection(connectionString);
           DB.Open();

           /* Prepare to read data */
           NpgsqlCommand Cmd = new NpgsqlCommand(SQLCommand, DB);
           NpgsqlDataReader dataReader = Cmd.ExecuteReader();

           /* Create CSV writer */
           StreamWriter outputFile = new StreamWriter("Output.csv") ;
           var csv = new CsvWriter(outputFile);
           csv.Configuration.Delimiter = ",";
           csv.Configuration.Quote = '"';
           csv.Configuration.QuoteAllFields = true;

           /* Write Data Header */
           for (var i = 0; i < dataReader.FieldCount; i++)
           {
               csv.WriteField(dataReader.GetName(i));
           }
           csv.NextRecord();

           /* Read data from DB and write it to CSV */
           while (dataReader.Read())
           {
               for (var i = 0; i < dataReader.FieldCount; i++)
               {
                   var value = dataReader[i].ToString();
                   csv.WriteField(value);
               }
               csv.NextRecord();
           }

           /* Close everything */
           outputFile.Close();
           DB.Close();
       }
   }
}

psql用, not with等連接到遠端機器ssh,然後執行。

psql -d database -h myHost -p portNum

\COPY ...

那是\COPY,不是COPY。它會起作用的。

您可以創建一個 ssh 隧道,但如果您使用 ssh 連接到遠端並在本地執行 psql,那麼只會在遠端電腦上獲取您的轉儲。您仍然需要使用 rsync/scp 等進行傳輸。

引用自:https://dba.stackexchange.com/questions/157867