PostgreSQL之Ubuntu 20.04下的簡單安裝與相關設置


環境

  • 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM