Postgresql
postges:儘管文件存在,但 psql csv 導入失敗
嘗試
csv
按如下方式導入文件:psql -h 127.0.0.1 -d jira_statistics -U admin -p 5432 -c "COPY bugs FROM '/home/centos/bugs.csv' delimiter '|' csv;" Password for user admin: ERROR: could not open file "/home/centos/bugs.csv" for reading: No such file or directory HINT: COPY FROM instructs the PostgreSQL server process to read a file. You may want a client-side facility such as psql's \copy.
但是文件和表都存在於
jira_statistics
db中[root@jira-statistics ~]# ls /home/centos/bugs.csv /home/centos/bugs.csv [root@jira-statistics ~]# psql -h 127.0.0.1 -p 5432 -U admin jira_statistics Password for user admin: psql (9.2.24, server 11.1 (Debian 11.1-3.pgdg90+1)) WARNING: psql version 9.2, server version 11.0. Some psql features might not work. Type "help" for help. jira_statistics=# \dt List of relations Schema | Name | Type | Owner --------+----------+-------+------- public | bugs | table | admin public | devtasks | table | admin public | releases | table | admin public | stories | table | admin
COPY 失敗的最常見原因是提示中的建議,但錯誤是“權限被拒絕”。
由於您得到“沒有這樣的文件或目錄”,並且簡單
ls
地表明該文件存在,因此您首先要檢查一些看似合理的解釋:
/home/centos/bugs.csv
是指向不存在文件的軟連結。如果ls -l
它是軟連結,請確保檢查目的地。127.0.0.1:5432
在網路級別被重定向到另一台機器。這種技術廣泛用於通過SSH 隧道連接到遠端服務。- 您的作業系統使用花哨的安全/隔離功能,禁止在不發出Permission denied錯誤的情況下
postgres
進行讀取。在作業系統帳戶下嘗試。/home/centos/bugs.csv``ls -l /home/centos/bugs.csv``postgres
- 由於容器化,您的伺服器和客戶端不在同一個MOUNT 命名空間下執行。
在 #2 #3 或 #4 的情況下,只需
\copy
按照錯誤消息的提示部分中的建議使用。
這可能是數據庫權限問題、文件系統權限問題,也可能是文件編碼類型的問題。(也可能不是上述任何一種)。以下是我的建議:
對於數據庫權限:只有超級使用者或特定角色的使用者才能使用 COPY。請參閱有關COPY 命令的postgresql 文件:
COPY 命名文件或命令只允許數據庫超級使用者或被授予預設角色 pg_read_server_files、pg_write_server_files 或 pg_execute_server_program 之一的使用者,因為它允許讀取或寫入任何文件或執行伺服器有權訪問的程序。
對於文件系統權限:檢查服務是否對文件具有讀取權限。