2013-02-22 41 views
1

我們的PostgreSQL運行在unix框上,並且多個用戶同時擁有單獨的unix帳戶和單獨的數據庫登錄名。那種工作流程,我們正在努力使這些用戶的是:通過連接到遠程PostgreSQL服務器訪問文件系統

  1. 傳輸大文件到服務器(通常通過Samba)
  2. 建立從用戶的PC遠程連接到PostgreSQL
  3. 閱讀把大文件放到一個(最好是臨時的)表中並做一些分析

絆腳石是如何在登錄PostgreSQL時訪問文件。乍一看,這似乎無法安全地進行,因爲數據庫在postgres帳戶下運行,該帳戶甚至無法訪問屬於其他unix帳戶的文件。開箱即用,我相信PostgreSQL用戶可以訪問本地文件的唯一方法是(a)使文件可以被postgres unix帳戶讀取,並且(b)爲數據庫用戶提供較高的權限以允許他們使用COPY FROM命令在Postgres中。這是不可能的。用戶不能讀取彼此的數據。

我們目前使用的解決方法是將shell放入服務器並運行psql,它允許用戶使用\copy元命令從本地文件中獲取數據。但是這會使工作流程變得複雜,並且對於我們大多不熟悉unix的用戶來說並不是很滿意。相反,他們希望從基於PC的分析軟件包SAS驅動整個過程,該軟件包可以通過ODBC直接連接到Postgres。

我正在尋找針對此問題的創造性解決方案。顯然,上面列出的天真的工作流程完全與unix安全模型不一致。但是,有沒有一種替代方案可以從用戶的角度同樣起作用?我們很高興考慮存儲過程,中間人代理等。

回答

1

如果您的用戶通過SAS連接,他們可以通過SAS-PSQL連接自己上傳文件嗎?作爲SAS用戶,這當然是可能的;像

libname psql odbc (connection-string); 
data psql.mytable; 
set sastable; 
run; 

當然,這需要它首先在本地讀入SAS,但這很可能是微不足道的。這裏的主要潛在問題是時間 - 這種方式轉移無疑比SAMBA慢;但也許爲了簡單起見,花費的時間是值得的?

+0

是的,我們從這樣的事情開始,但對於有數百萬行的文件,我們經歷了嚴重的減速。不過,絕對贊同你的簡單性! – 2013-02-22 09:00:24

+0

數百萬行應該仍然可以管理,如果他們插入正確。 PostgreSql是否具有批量插入功能?不知道SAS是否會支持它(它支持一些批量插入,而不支持其他),但如果它可以工作。如果沒有,你是否至少插入一個臨時(臨時)表是空的,沒有約束?然後,SAS可以切換到SQL模式(使用自己的語言直接向PostgreSQL發出命令,而不是使用SAS命令)。 – Joe 2013-02-22 09:04:11

+0

這可能是根本問題。我正在查看一些SAS文檔,它似乎是說ODBC驅動程序只支持連接到SQL Server的批量加載?我很確定沒有專門針對Postgres的SAS驅動程序,這就是我們使用ODBC的原因。 – 2013-02-22 09:14:20

相關問題