2013-12-08 50 views
0

如何將數據從文件複製到SQL中的表中?我在Macbook上使用pgAdmin3。如何在SQL中將數據從文件複製到表中?

表名是tutor,文件名是tutor.rtf。

我用下面的查詢:?

COPY tutor 
FROM /Users/.../tutor.rtf 
WITH DELIMITER ','; 

,但得到的錯誤拒絕「權限」

該文件沒有鎖定那麼,你如何解決這個問題,或者有沒有其他的更快辦法從文件中的數據複製到表除了INSERT INTO ... VALUE();

+0

我的膝蓋反應反應是說:「請發佈'ls -l/Users /.../ tutor.rtf'的結果,這樣我們都可以看到文件具有適當的權限(因爲你說的文件沒有鎖定)「第二次看,你有一個點太多了嗎?或者你是否爲了簡潔而省略了完整的路徑?如果您對此帖子進行了更改,我會請求您粘貼原始路徑。 –

回答

0

COPY使用PostgreSQL服務器後端打開文件,所以它需要用戶postgresql的運行方式爲對該文件具有讀權限(針對COPY FROM)。它還需要與INSERT表相同的SQL級別訪問權限,但我懷疑它的文件許可權是讓你在這裏。

最可能的是postgrespostgres_(取決於您安裝PostgreSQL的方式)用戶不具有對/Users/somepath/tutor.rtf或該文件的某個父目錄的讀訪問權限。

最簡單的解決方法是使用psql\copy命令,使用客戶權限,而不是那些服務器讀取該文件,並使用相對於客戶端的當前工作目錄的路徑。該命令在PgAdmin-III中不可用。

較新的PgAdmin-III版本在表格上下文菜單中有導入命令。請參閱importing tables from file in the PgAdmin-III docs。這相當於psql\copy命令,讀取具有PgAdmin-III應用程序訪問權限的文件。

或者您可以通過確保每個目錄從/Users使用服務器端COPY命令,直至somepath擁有世界執行權限 - 這意味着用戶可以遍歷它,進入這個目錄,等等,但沒有r無法列出其內容權利也是。然後將文件設置爲組postgres,並確保它具有組讀取權限,或使其具有世界可讀性。

相關問題