環境
- Ubuntu 20.04
1. 默認安裝
在Ubuntu 20.04下,PostgreSQL的默認版本已經達到12.8(2021年10月14日)。於我而言,這個版本已經足夠新,所以不使用官方介紹的方法來安裝最新的版本,直接使用以下命令安裝。
sudo apt install postgresql
2. 設置調用命令路徑
PostgreSQL安裝后會提供一些很有用的命令,但是並不能直接調用,需要我們編輯配置文件,把這些命令所在路徑添加進去。可以先用find或者下面這個命令來查詢這些postgresql命令所在目錄:
locate initdb
如果還沒有安裝locate命令(通過名稱發現文件)的話,可以用sudo apt install mlocate來安裝。
以上命令會列出下面的內容:
/etc/alternatives/initdb.1.gz
/usr/lib/postgresql/12/bin/initdb
/usr/share/man/man1/initdb.1.gz
/usr/share/postgresql/12/man/man1/initdb.1.gz
當然,這個結果大家不一定相同。從結果中我們很容易就發現第2行正是我們需要的。編輯/etc/profile文件(因為其他賬號也會使用這些命令,所以修改這個文件,而不是當前賬號下的配置文件。),加入以下內容:
# PostgreSQL
export PATH=$PATH:/usr/lib/postgresql/12/bin
保存后注銷、重新登錄。這時每個賬號都可以調用許多有用的PostgreSQL命令了。此外,這里也介紹一個查詢當前PostgreSQL相關目錄的命令:
ps auxw | grep postgres | grep -- -D
在我的電腦上顯示的結果為:
postgres 11041 0.0 0.2 227072 29408 ? Ss 20:01 0:00 /usr/lib/postgresql/12/bin/postgres -D /var/lib/postgresql/12/main -c config_file=/etc/postgresql/12/main/postgresql.conf
可以用以下命令查詢當前postgresql的版本:
postgres --version
3. 用戶設置
為了操作方便,我把當前操作系統用戶(例如starry)加入到postgres用戶組中。
sudo adduser starry postgres
4. 創建數據庫集簇
PostgreSQL安裝后,會生成一個默認的數據庫存儲區域。如果不想用默認的,那就自己創建一個新的區域(集簇)吧。比如,有的時候我們希望數據庫是保存在移動介質上,需要使用時才掛到當地的PostgreSQL上。雖然可以使用備份還原來處理,但是相對麻煩。原來在使用MSSQL時,可以很方便的把數據庫文件脫離或掛載到數據庫上,但因為我剛接觸PostgreSQL,還沒有發現類似的功能。
使用下面的命令創建,注意后面的路徑,根據自己的習慣進行設置。創建集簇的方法有好幾種,這里暫時只介紹這一種。
sudo chown -R postgres:postgres /home/starry/tree/public/clover/data/pgsql/
sudo service postgresql stop
sudo su - postgres
initdb -D /home/starry/tree/public/clover/data/pgsql/data
postgres -D /home/starry/tree/public/clover/data/pgsql/data
- 第1行命令把需要創建新集簇的目錄權限賦給postgres;
- 第2行命令把正在運行的postgresql服務停止;
- 第3行命令切換到postgres用戶下;
- 第4行命令用於創建新集簇;
- 第5行命令用於啟用新集簇。
最后一行命令運行后會有以下提示:
2020-06-12 23:23:22.528 CST [23021] LOG: starting PostgreSQL 12.2 (Ubuntu 12.2-4) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-8ubuntu1) 9.3.0, 64-bit
2020-06-12 23:23:22.528 CST [23021] LOG: listening on IPv4 address "127.0.0.1", port 5432
2020-06-12 23:23:22.561 CST [23021] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2020-06-12 23:23:22.688 CST [23022] LOG: database system was shut down at 2020-06-12 23:17:01 CST
2020-06-12 23:23:22.736 CST [23021] LOG: database system is ready to accept connections
這樣就表示已經成功啟動,這個終端窗口就這樣開着吧,如果用ctrl-c中斷的話,服務也就停止了。我們另開一個窗口,用以下命令查詢一下當前postgresql的狀態:
ps auxw | grep postgres | grep -- -D
運行結果如下:
postgres 23021 0.0 0.2 226780 27644 pts/0 S+ 23:23 0:00 postgres -D /home/starry/tree/public/clover/data/pgsql/data
從結果上可以看見,當前指向的數據庫集簇正是我們新建的集簇。
5. 增加用戶
PostgreSQL安裝后,會有一個默認的賬號:postgres。但我習慣創建一個與當前使用的操作系統賬號相同的數據庫賬號,例如我在Ubuntu 20.04下使用的starry賬號。按照以下步驟創建,並且在創建時賦予相應權限。
sudo su - postgres
psql
CREATE ROLE starry WITH LOGIN CREATEDB ENCRYPTED PASSWORD '2020-Jun';
\q
exit
現在就可以使用新賬號在新的數據庫集簇下工作了。在還沒有新建任何數據庫時,可以先用以下命令進入:
psql -d postgres
注意,這條命令是在starry用戶下執行的。進入的是默認的postgres數據庫。
6. 啟動新集簇
如果不修改默認啟動新集簇,只有在需要時才使用的話,可以用以下命令實現啟動新集簇:
sudo service postgresql stop
sudo su - postgres
postgres -D /home/starry/tree/public/clover/data/pgsql/data
如果需要經常使用新集簇,可以修改配置文件,在我的電腦上是:/etc/postgresql/12/main/postgresql.conf 。其中要修改的部分是:
原文如下:
#------------------------------------------------------------------------------
# FILE LOCATIONS
#------------------------------------------------------------------------------
# The default values of these variables are driven from the -D command-line
# option or PGDATA environment variable, represented here as ConfigDir.
data_directory = '/var/lib/postgresql/12/main' # use data in another directory
# (change requires restart)
hba_file = '/etc/postgresql/12/main/pg_hba.conf' # host-based authentication file
# (change requires restart)
ident_file = '/etc/postgresql/12/main/pg_ident.conf' # ident configuration file
# (change requires restart)
# If external_pid_file is not explicitly set, no extra PID file is written.
external_pid_file = '/var/run/postgresql/12-main.pid' # write an extra PID file
# (change requires restart)
修改后的內容
#------------------------------------------------------------------------------
# FILE LOCATIONS
#------------------------------------------------------------------------------
# The default values of these variables are driven from the -D command-line
# option or PGDATA environment variable, represented here as ConfigDir.
#data_directory = '/var/lib/postgresql/12/main' # use data in another directory
# (change requires restart)
#hba_file = '/etc/postgresql/12/main/pg_hba.conf' # host-based authentication file
# (change requires restart)
#ident_file = '/etc/postgresql/12/main/pg_ident.conf' # ident configuration file
# (change requires restart)
# If external_pid_file is not explicitly set, no extra PID file is written.
external_pid_file = '/var/run/postgresql/12-main.pid' # write an extra PID file
# (change requires restart)
#------------------------------------------------------------------------------
data_directory = '/home/starry/tree/public/clover/data/pgsql/data'
hba_file = '/home/starry/tree/public/clover/data/pgsql/data/pg_hba.conf'
ident_file = '/home/starry/tree/public/clover/data/pgsql/data/pg_ident.conf'
#------------------------------------------------------------------------------
大家可以看見只是修改了data_directory、hba_file與ident_file三處的內容,也就是修改成剛才我們創建新集簇的位置。原來的配置用#號注釋掉即可。保存文件、重啟,然后再運行命令:
ps auxw | grep postgres | grep -- -D
我們就會發現內容變成:
postgres 1120 0.0 0.2 221544 29208 ? Ss 13:49 0:00 /usr/lib/postgresql/12/bin/postgres -D /home/starry/tree/public/clover/data/pgsql/data -c config_file=/etc/postgresql/12/main/postgresql.conf
默認的集簇已經指向新建的集簇。
7. 安裝pgAdmin工具
為了方便使用PostgreSQL,可以安裝工具pgAdmin,安裝方法官方網站有詳細介紹,地址是:pgAdmin4。