Postgresql
無法使用 PostgreSQL COPY 從 /tmp 讀取,但能夠以完全相同的權限從另一個目錄讀取相同的文件
我有一個
/tmp/foo.csv
看起來像這樣的文件:1,2 10,20 100,200
我在另一個目錄中有相同的文件
/mydata/foo.csv
。目錄和文件都具有相同的權限、所有者,並且是由同一個使用者創建的,但是當我執行時COPY foo FROM '/tmp/foo.csv' (FORMAT CSV, DELIMITER ',', HEADER TRUE);
我收到這個錯誤
ERROR: could not open file "/tmp/foo.csv" for reading: No such file or directory
當我跑
COPY foo FROM '/mydata/foo.csv' (FORMAT CSV, DELIMITER ',', HEADER TRUE);
我明白了
COPY 3
。我在這裡想念什麼?
以下是相關文件和目錄資訊:
╭─foo@bar / ‹py27› ╰─$ ll -d /mydata /mydata/foo.csv /tmp /tmp/foo.csv 1 ↵ drwxrwxrwt 2 root root 4.0K Sep 9 08:26 /mydata drwxrwxrwt 17 root root 420 Sep 9 08:57 /tmp -rw-r--r-- 1 root root 17 Sep 6 12:03 /mydata/foo.csv -rw-r--r-- 1 root root 17 Sep 9 08:36 /tmp/foo.csv ╭─foo@bar / ‹py27› ╰─$ diff /mydata/foo.csv /tmp/foo.csv ╭─foo@bar / ‹py27› ╰─$
我正在執行 Arch Linux
**注意:**我也在另一台執行 CentOS 的 Linux 機器上試過這個,但我無法重現這個問題。
在 Arch 上,PostgreSQL (
/usr/lib/systemd/system/postgresql.service
) 的 systemd 腳本啟用私有 /tmp,這意味著 PostgreSQL 伺服器程序無法使用 /tmp 與使用者通信。兩種可能的解決方案:
- 在其他地方創建一個新文件夾並賦予使用者
postgres
讀取權限:# sudo mount -t tmpfs -o users,rw tmpfs /data
- (不推薦)將
PrivateTmp
postgresql.service 中的選項設置為false
.