- 默認位置
Fedora27中,PostgreSQL存儲其數據庫的默認位置爲/var/lib/pgsql/10/data
- 運行
ls -lZ /var/lib/pgsql/10
查看postgresql的默認數據庫位置的SELinux上下文
這顯示了postgresql_db_t,它是數據庫文件位置的默認上下文元素。必須手動將此上下文應用於將在此示例中使用的新數據庫位置,以使其正常運行。 - 創建一個新的用於存放數據庫數據的位置。本例中使用
/opt/postgresql/data
;
# mkdir -p /opt/postgresql/data
- 執行新位置的目錄列表。請注意,新目錄的初始上下文是usr_t,這個上下文不足以讓SELinux爲PostgreSQL提供保護機制。當我們更改好上下文後,它將能夠在新區域中正常運行。
# ls -lZ /opt/postgresql/
- 更改新位置的所有權以允許postgres用戶和組訪問。這設置了SELinux仍將遵守的傳統Unix權限。這設置了SELinux仍將遵守的傳統Unix權限。
# chown -R postgres:postgres /opt/postgresql
- 改
/usr/lib/systemd/system/postgresql-10.service
文件,相應的Environment
改爲
Environment=PGDATA=/opt/postgresql/data/
.重新加載使更改生效,sudo systemctl daemon-reload
。 su - postgres
進postgres用戶下,修改~/.bash_profile
,同樣使PGDATA=/opt/postgresql/data/
,運行source ~/.bash_profile
使文件生效。- 初始化新位置的數據庫。
su - postgres -c "initdb -D /opt/postgresql/data"
- 運行
semanage
命令爲/ opt / postgresql
及其中的任何其他目錄/文件添加上下文映射:
semanage fcontext -a -t postgresql_db_t "/opt/postgresql(/.*)?"
- 此映射將寫入文件
/etc/selinux/targeted/contexts/files/file_contexts.local
: - 現在使用
restorecon
命令將此上下文映射應用於正在運行的系統:restorecon -R -v /opt/postgresql
- 現在/ opt / postgresql位置已經標記了PostgreSQL的正確上下文,mysqld服務將成功啓動:
# service postgresql start
- 確認
/ opt / postgresql
的上下文是否正確:等功能,功能按鈕位於編輯區域與預覽區域中間;
參考:
[1]【Postgresql】數據庫postgresql 10的data目錄遷移(不用重新安裝)
[2] PostgreSQL Changing Database Location