2016-11-16 40 views
0

目前,我用無需root權限創建PostgreSQL數據庫

$ sudo service postgresql start  

啓動PostgreSQL服務器和

$ sudo -u postgres createdb testdb --owner ownername 

創建數據庫。但是,這些命令需要root權限。如何在Linux(Ubuntu)上沒有root權限/ sudo的情況下執行這些操作?

+0

如果你想運行一個系統服務的東西,你需要root權限。但是你可以在你自己的用戶帳戶下本地運行Postgresql。 'createdb'不需要root用戶(只需將Postgres作爲Postgres管理員用戶訪問,可以由任何操作系統用戶甚至遠程用戶完成) – Thilo

+0

@Thilo您能否解釋如何在本地運行Postgresql? – JHu

回答

5

通過創建一個新實例(PostgreSQL稱之爲「集羣」)並啓動它,您可以運行沒有root權限的PostgreSQL。

如果你這樣做,你不能使用Ubuntu init腳本,包裝工具如pg_ctlcluster等。你只能使用PostgreSQL自己的工具。

要創建具有超級用戶等於您的用戶名新的PostgreSQL實例,默認情況下,使用使你的主目錄數據目錄和MD5身份驗證:

initdb -D $HOME/my_postgres -A md5 -U $USER 

根據需要調整;見initdb --help

然後,您需要編輯postgresql.confport更改爲非默認端口,因爲您的系統可能在默認端口5432上運行自己的postgres。(如果您想嚴格限制訪問權限,您可以而不是設置listen_addresses = ''unix_socket_directories = /home/myuser/postgres_socket或什麼,但它更簡單,只需使用不同的端口)

要啓動它:。

pg_ctl -D $HOME/my_postgres -w start 

連接到它,說明你選擇的端口:

psql -p 5434 ... 

(如果你改變unix_socket_directories你還需要指定你給像-h /home/myuser/postgres_socket路徑。)

爲了psql等默認連接到你的Postgres,編輯~/.bashrc添加類似

export PGPORT=5434 

但請注意,它也會影響與其他主機的連接的默認端口。

要停止它:

pg_ctl -D $HOME/my_postgres -w stop 

,但你也可以只關閉不停止,它並不關心,當你下次啓動它會安全地恢復。

要在您的主目錄中設置它時登錄時自動啓動它,您必須使用桌面環境的啓動時運行功能。它們因環境和版本而異,所以我不能在這裏提供細節;它不同於GNOME 3,Unity(ubuntu),KDE,XFCE等。

請注意,此方法仍然使用系統用於PostgreSQL。這很重要,因爲如果你卸載(比如說)PostgreSQL 9.4並安裝9.6,你的主目錄中的副本將停止工作。如果你希望它完全獨立於系統包,就像你不控制系統時那樣,你應該從源代碼編譯PostgreSQL,或者使用二進制安裝程序安裝在你的主目錄中。