2017-09-29 28 views
0

我有自定義軟件,其中包含一個函數,用於在postgresql服務器上的表之間複製數據。它一次完成這一行,這在服務器靠得很近的時候很好,但由於我已經開始部署延遲大於300毫秒的服務器,所以根本無法正常工作。Postgresql從PHP腳本內複製批量數據 - 理想情況下使用ADODB

我相信解決方案是使用「COPY」語句,但我很難實現它。我正在使用ADODB php library

當我嘗試從文件複製時,出現錯誤「必須是超級用戶才能複製到文件或從文件複製」。問題是,我不知道如何複製「stdin」,其中標準輸入實際上沒有管道到PHP腳本。有沒有什麼辦法提供stdin輸入作爲使用ADODB的sql命令的一部分,或者是否存在一個等同的命令,它允許我在不等待每個單獨插入的情況下執行批量插入?

回答

0

我用它曾在一個聲明中的所有刀片使用「UNION ALL」插入命令解決了這個問題 - 即這種解決方案的

$sql="INSERT INTO tablename (name,payload) 
    select 'hello', 'world' union all 
    select 'this', 'is a test' union all 
    select 'and it', 'works'"; 
$q=$conn->Execute($sql); 

一個侷限性是字符串需要而整數被enquoted例如,一定不能。因此,我需要編寫一些額外的代碼,以確保某些字段被引用而不是其他代碼。

要找出哪些列需要被enquoted我用

$coltypes=$todb->GetAll("select column_name,data_type 
         from information_schema.columns 
         where table_name='".$totable."'"); 
+0

https://stackoverflow.com/questions/36476192/postgresql-copy-transfer-data-from-one-database-to-another –

+0

@nathanhayfield - 感謝您的鏈接,但該解決方案無法解決我的問題 - 它是在同一臺服務器上覆制數據庫。我的問題是在服務器和Postgres內複製。 – davidgo

+0

我已經添加了更多信息的答案 –

相關問題