2016-12-01 53 views
0

我在Ubuntu 16.04上安裝了PostgreSQL 9.5。由於它位於SSD上,我不想過於頻繁地寫入,所以我寧願將大部分數據保存在最近安裝並分區到Ext4文件系統的硬盤上(通過SATA連接)。 (Postgres的安裝在SSD)如何在已安裝的第二個硬盤上獲得PostgreSQL表空間?

我想創建硬盤驅動器具有以下所有權和位置設置在表空間:

[email protected]:/media/me/EXT4_LARGE# ls -la 
total 36 
drwx------ 6 me  root  4096 Nov 30 23:17 . 
drwxr-x---+ 5 me  root  4096 Nov 30 23:09 .. 
drwx------ 2 root  root  16384 Nov 30 21:59 lost+found 
drwx------ 2 postgres postgres 4096 Nov 30 22:25 pg_data 

而且從psql命令行:

postgres=# CREATE TABLESPACE hdd_ts LOCATION 
'/media/me/EXT4_LARGE/pg_data'; 
ERROR: could not set permissions on 
directory "/media/me/EXT4_LARGE/pg_data": Permission denied 

我試過修改各種配置中的所有權設置,但他們都沒有工作。

如何獲取硬盤上的表空間?

+0

不知道關於Ubuntu,因爲我使用Windows,但postgres需要persmision寫在磁盤上。僅供參考,我在SSD中創建我的表空間,因爲我希望我的數據庫更快。不知道你爲什麼要把表空間放在一個慢SATA中。 –

+1

在EXT4_LARGE和pg_data之間需要一個額外的目錄節點,以允許postgres寫入該目錄。這裏是'/ ssd/db/postgres /',所有者是postgres。 – wildplasser

+0

正如wildplasser所說 - 它試圖在pg_data目錄上設置權限。爲了能夠做到這一點,它需要讀/寫訪問p​​g_data的父目錄。 –

回答

2

在Linux中,用戶需要父目錄的'x'權限才能進入目錄並訪問其中的文件和目錄。

他們還需要'w'權限才能對該目錄中的條目進行任何更改。

從您的打印輸出:

drwx------ 6 me  root  4096 Nov 30 23:17 . 

這告訴我,只有用戶me對目錄/media/me/EXT4_LARGExw權限。因此,用戶postgres將無法​​更改/media/me/EXT4_LARGE/pgdata的權限,甚至無法在其中看到它。

一個快速和骯髒的解決辦法是:

chmod a+rwx /media/me/EXT4_LARGE 

該解決方案的缺點是它會給所有用戶讀EXT4_LARGE /寫訪問。更細化的方法是創建一個組並分配組權限。

而且它可能是不明智給Postgres的訪問整個EXT4_LARGE文件系統,所以按照一些評論,你可能要在這兩者之間創建另一個目錄級別,例如:

mkdir -p /media/me/EXT4_LARGE/db/pgdata 
chown postgres:postgres /media/me/EXT4_LARGE/db 
chown postgres:postgres /media/me/EXT4_LARGE/db/pgdata 
chmod a+x /media/me/EXT4_LARGE/ 

注意,所有父目錄需要x權限,因此您可能需要調整/media/me/media

+0

是的,EXT4_LARGE的目錄權限是問題所在。添加x權限工作。謝謝! –

相關問題