2012-02-08 77 views
1

即時工作在delphi 7應用程序與postgres 9作爲數據庫。 應用程序的工作方式有兩種,它可以遠程系統 在delphi中對遠程系統執行Postgres查詢時獲取本地系統路徑

上連接到

  1. Postgres數據庫在本地系統上
  2. Postgres的本地和遠程的Postgres數據庫將具有相同表的數量。

    我們有模塊,我們使用COPY創建數據庫表的備份,並將結果寫入系統中的文件。 例如

    query1:='COPY (Select * from mytable where mycolumn in (2011406)) TO 'C:/Documents and Settings/All Users/Documents/drDir/myfile.bck' WITH BINARY'

     Query_dmp_res.SQL.Clear; 
        Query_dmp_res.SQL.Add(query1) ; 
        Query_dmp_res.ExecSQL; 
    

    C:/Documents and Settings/All Users/Documents/drDir是如果不是在本地系統上現有創建的路徑。

    由於上述查詢在本地系統上執行,並且C:/Documents and Settings/All Users/Documents/drDir/也存在 在使用本地系統時,此工作正常。

    但問題是,當我們連接到遠程系統。查詢 'COPY (Select * from mytable where mycolumn in (2011406)) TO 'C:/Documents and Settings/All Users/Documents/drDir/myfile.bck' WITH BINARY'失敗/drDir/在本地系統上,而不是在遠程系統上創建的路徑。

    enter image description here

    但即使路徑'C:/Documents and Settings/All Users/Documents/drDir/在遠程系統上存在的文件/myfile.bck在遠程系統上創建。

    任何一個可以告訴我如何

    1. 給我的系統的路徑,因此在執行查詢後的文件/myfile.bck是我的系統上創建的。 這是如何指定查詢 'COPY (Select * from mytable where mycolumn in (2011406)) TO 'myLocalSystemPath/myfile.bck' WITH BINARY'

    2. 如何建立檔案查詢執行遠程系統上的目錄我的本地系統路徑。

    我試圖改變路徑'C:\Documents and Settings\All Users\Documents\drDir\ 但我得到這個錯誤 enter image description here

    編輯 我試過

    COPY(SELECT * FROM MYTABLE其中mycolumn在(2011406 ))要與STDOUT WITH BINARY 但如何獲得查詢的結果?

回答

2

1)不可能時指定的文件名(excerpt from the docs):

COPY與文件名指示直接從讀取或寫入到一個文件中PostgreSQL服務器。該文件必須可供服務器訪問,並且該名稱必須從服務器的角度指定。

下一句,雖然給你一些想法(這依賴於司機也):

當指定STDIN或STDOUT,數據通過客戶端和服務器之間的連接傳輸。

2)這是訪問服務器的問題,請諮詢您的管理員......但請記住,當您在服務器上創建文件夾時,運行Postgres的用戶應該可以訪問該文件夾。

+0

使用「TO STDOUT」時會發生什麼情況取決於您的程序使用的驅動程序。請檢查他們的文檔。 – 2012-02-09 07:27:45