2015-01-16 62 views
1

當我執行下面的腳本:Postgres的 - 輸出保存到服務器硬盤

copy (
select agk_p_id Promoter_agk, multiplication_lr_agk_p_k4, agk_lr_rvd, status_agk_p_k4 
from patient_agk_p_expr 
where status_agk_p_k4='Preferentially') 
to 'g:\boom.csv' 
With CSV HEADER; 

它用起來很漂亮,並創建我的G盤上boom.csv文件。 我得到:

Query returned successfully: 8486 rows affected, 631 ms execution time. 

我要指出,我的「G」驅動器是連接到我的計算機的外部硬盤。 而我的cygwin是指我摹硬盤這樣的:

[email protected] /cygdrive/g/ 
$ pwd 
/cygdrive/g 

現在,我的電腦也訪問我的組織的服務器硬盤。 在我的Windows資源管理器是指爲(Z :)

我的cygwin指的是「Z」相應地驅動(一樣的它給我的C:驅動器):

[email protected] /cygdrive/z/ 
$ pwd 
/cygdrive/z 

但是我有煩惱時,談到有Postgres的認識到這一點的硬盤 - 當我試圖運行下面的腳本,以我的表保存在Z硬盤:

copy (
select agk_p_id Promoter_agk, multiplication_lr_agk_p_k4, agk_lr_rvd, status_agk_p_k4 
from patient_agk_p_expr 
where status_agk_p_k4='Preferentially') 
to 'z:\boom.csv' 
With CSV HEADER; 

我收到以下錯誤信息:

ERROR: could not open file "z:\boom.csv" for writing: No such file or directory 
********** Error ********** 

ERROR: could not open file "z:\boom.csv" for writing: No such file or directory 
SQL state: 58P01 

有沒有人知道如何保存(複製到)我的文件,當涉及到硬盤驅動器沒有物理連接到我的電腦,而是一個服務器硬盤? - 在postgres中是否有一個命令/腳本可以顯示postgres可以訪問哪些硬盤?看起來由於某種原因,Z硬盤不能用於postgres讀/寫,至少不是我嘗試它的方式,而G,J,K和其他外部HD硬盤 - 都可以訪問。我很高興知道我是否可以以某種方式擴展postgres的可訪問性。

謝謝!

@Mike謝里爾 '貓召回'

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

我的Z驅動在Windows資源管理器,也稱爲: (\ shares.nyumc.org \研究)(Z :), 因此我嘗試還有以下:

copy (
select agk_p_id Promoter_agk, multiplication_lr_agk_p_k4, agk_lr_rvd, status_agk_p_k4 
from patient_agk_p_expr 
where status_agk_p_k4='Preferentially') 
to '\\shares.nyumc.org\research\boom.csv' 
With CSV HEADER; 

這個腳本給我下面的錯誤,實際上所有有關權限:

ERROR: could not open file "\\shares.nyumc.org\research\boom.csv" for writing: Permission denied 
********** Error ********** 

ERROR: could not open file "\\shares.nyumc.org\research\boom.csv" for writing: Permission denied 
SQL state: 42501 

所以看起來正確的路徑是:

\\shares.nyumc.org\research\ 

而且,在這種情況下,(Z :)只是一個別名(?!)的錯誤消息是這一次不是「沒有這樣的文件或目錄「,而是關於權限。

  • 有沒有一種方法可以促進Postgres的必要權限,以便它可以寫入服務器驅動器?
+1

運行PostgreSQL的計算機是什麼? –

+0

My Postgres作爲典型的Windows機器運行,並且安裝時使用了所有正常的默認條件。它與我的所有外部驅動程序完美配合,除了服務器驅動程序Z之外。 – Roy

回答

1

運行COPY tablename to filename最常見的問題是從PostgreSQL服務器的角度處理路徑和權限問題。

在COPY命令中命名的文件由 服務器直接讀取或寫入,而不是由客戶端應用程序讀取或寫入。因此,他們必須駐留在 或可供數據庫服務器計算機訪問,而不是客戶端。它們 必須可由PostgreSQL用戶 (服務器運行的用戶標識)訪問且可讀或可寫,而不是客戶端。 Source

如果您嘗試寫入PostgreSQL服務器無法「看到」的文件,您將得到「沒有這樣的文件或目錄」。如果您嘗試寫入PostgreSQL服務器缺少權限的目錄中的文件,則會得到「權限被拒絕」。

因此,PostgreSQL用戶(運行服務器的用戶標識)缺乏「z」權限。

+0

謝謝! 有沒有辦法可以爲postgres添加必要的權限,以便能夠寫入我的Z驅動器? – Roy

+1

我認爲本地用戶「postgres」需要知道管理「z」驅動器的服務器,並且需要給予權限。你怎麼做取決於你的網絡配置。 (當我在Windows服務器上工作時,PostgreSQL在Windows服務器上運行,而不是在工作站上運行。)所以,是的,有一種方法,但是我不知道它在我頭頂。 –

+0

如果我去Windows任務管理器 - >服務... 我看到我的postgresql-x64-9.3-PostgreSQL服務器9.3登錄爲'網絡服務'。 如果你能把我推薦到我可以進一步研究如何使我的Z驅動器與我的postgres「談話」的地方,那將是非常有幫助的。 我們最近被要求將我們所有的數據移動到這個虛擬驅動器,如果我能直接從這個驅動器讀/寫,而不是將所有工作的副本保存在外部驅動器上,我會很高興。 – Roy