簡體   English   中英

將數據從Excel導入PostgreSQL

[英]Import data from Excel to PostgreSQL

我已經看到了關於stackoverflow的問題,與我現在所問的問題類似/相同,但是在我的情況下,我無法解決它。

事情是這樣的:我有一個excel電子表格(.xlsx),我將其轉換為逗號分隔值(.CSV),如在某些答案中所述:

我的excel文件看起來像這樣:

--------------------------------------------------
name  |  surname | voteNo  | VoteA | VoteB | VoteC
--------------------------------------------------
john  |  smith   | 1001    | 30    | 154   | 25
--------------------------------------------------
anothe|  person  | 1002    | 430   | 34    | 234
--------------------------------------------------
other |  one     | 1003    | 35    | 154   | 24
--------------------------------------------------
john  |  smith   | 1004    | 123   | 234   | 53
--------------------------------------------------
john  |  smith   | 1005    | 23    | 233   | 234
--------------------------------------------------

在PostgreSQL中,我創建了一個表,該表的名稱為allfields並創建了6列第1列和第2列作為character [],最后4列作為整數,其名稱與excel表中顯示的名稱相同(name, surname, voteno, votea, voteb, votec)

現在我正在這樣做:

copy allfields from 'C:\Filepath\filename.csv';

但我收到此錯誤:

 could not open file "C:\\Filepath\\filename.csv" for reading: Permission denied SQL state: 42501 

我的問題是:

  1. 我應該在PostgreSQL的allfields表中創建這些列嗎?
  2. 我是否需要修改Excel文件中的其他內容?
  3. 為什么會出現此“權限被拒絕”錯誤?
  1. 根據您的文件,前兩列都不需要為數組類型(character [])-與C字符串不同,postgres中的“字符”類型已經字符串。 您可能希望使事情變得更簡單,而將varchar用作這兩列的類型。
  2. 我不認為你這樣做。
  3. 檢查您是否仍未在excel中打開並鎖定該文件-如果您執行了“另存為”操作以從excel中將xlsx轉換為csv,則可能需要在excel中關閉該文件。

SQL狀態: PostgreSQL中的42501表示您無權在預期的模式中執行此類操作。 錯誤代碼列表顯示了這一點。

檢查您是否指向正確的架構,並且您的用戶具有足夠的特權。

文檔還指出 ,您需要在原始表上具有選擇特權,並在目標表上具有插入特權。

您必須對通過COPY TO讀取其值的表具有選擇特權,並且對於通過COPY FROM將值插入其中的表具有插入特權。 在命令中列出的列上具有列特權就足夠了。

  1. 是的,我想你可以。 對於COPY命令,有可選的HEADER子句。 檢查http://www.postgresql.org/docs/9.2/static/sql-copy.html
  2. 我不這么認為。 對於我的#1和#3,它應該可以工作。
  3. 為此,您需要超級用戶權限。

1)我應該在PostgreSQL的allfields表中創建那些列嗎?

在字符字段中使用text 在任何情況下都不是數組,正如@yieldsfalsehood正確指出的那樣

2)我必須修改Excel文件中的其他內容嗎?

沒有。

3)為什么我會收到此“權限被拒絕”錯誤?

您的系統用戶postgres (或與之運行postgres服務器的任何用戶)都需要訪問該文件。 每個文檔:

帶有文件名的COPY指示PostgreSQL服務器直接從文件讀取或寫入文件。 服務器必須可以訪問該文件,並且必須從服務器的角度指定名稱。

數據庫用戶的特權不是問題的原因。 但是(引用同一頁):

僅允許數據庫超級用戶使用COPY命名文件或命令,因為它允許讀取或寫入服務器有權訪問的任何文件。

關於權限問題,如果使用psql發出COPY命令,請嘗試使用\\copy

好的,問題是我需要更改Excel filepath 我將其插入所有用戶都可以訪問公共帳戶中。

如果您遇到相同的問題,請將excel file移到C:\\\\User\\Public文件夾(此文件夾是沒有任何限制的公用文件夾),否則您必須處理Windows permission issues

對於那些由於某些原因不希望將文件移動到其他位置(公共)的用戶。 這是一個明確的解決方案。

  1. 右鍵單擊保存文件的文件夾,然后選擇屬性
  2. 選擇屬性下的安全選項卡。
  3. 選擇編輯
  4. 選擇添加
  5. 在“ 輸入要選擇的對象名稱 ”字段下,鍵入“ 所有人”
  6. 單擊“ 確定”進入所有對話框,或單擊“激活”。
  7. 嘗試再次讀取文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM