天天看點

PostgreSQL一鍵安裝腳本及安裝檔案詳解

作者:問dao

PostgreSQL是一個開源的關系型資料庫管理系統(RDBMS),它有多個版本和釋出系列。

以下是一些常見的 PostgreSQL 版本:

  1. PostgreSQL 9.x 系列:這是較舊的穩定版本系列,包括9.0、9.1、9.2、9.3、9.4、9.5、9.6等版本。
  2. PostgreSQL 10.x 系列:這是較新的穩定版本系列,包括10.0、10.1、10.2、10.3、10.4等版本。
  3. PostgreSQL 11.x 系列:這是較新的穩定版本系列,包括11.0、11.1、11.2、11.3等版本。
  4. PostgreSQL 12.x 系列:這是較新的穩定版本系列,包括12.0、12.1、12.2等版本。
  5. PostgreSQL 13.x 系列:這是最新的穩定版本系列,包括13.0、13.1、13.2等版本。

此外,還有一些 PostgreSQL 的開發版本和測試版本,例如Alpha版本、Beta版本等,用于測試和開發新功能。

在CentOS 7上一鍵安裝PostgreSQL 12.3,并從國内鏡像源進行下載下傳:

#!/bin/bash

# 設定國内鏡像源
echo "設定國内鏡像源..."
echo "exclude=postgresql*" >> /etc/yum.repos.d/CentOS-Base.repo
echo "[pgdg12]" > /etc/yum.repos.d/pgdg.repo
echo "name=PostgreSQL 12 for RHEL/CentOS 7 - x86_64" >> /etc/yum.repos.d/pgdg.repo
echo "baseurl=https://mirrors.tuna.tsinghua.edu.cn/postgresql/repos/yum/12/redhat/rhel-7-x86_64" >> /etc/yum.repos.d/pgdg.repo
echo "enabled=1" >> /etc/yum.repos.d/pgdg.repo
echo "gpgcheck=0" >> /etc/yum.repos.d/pgdg.repo

# 安裝 PostgreSQL 12.3
echo "安裝 PostgreSQL 12.3..."
yum install -y postgresql12-server

# 初始化資料庫
echo "初始化資料庫..."
/usr/pgsql-12/bin/postgresql-12-setup initdb

# 啟動 PostgreSQL
echo "啟動 PostgreSQL 12.3..."
systemctl start postgresql-12

# 設定開機自啟動
echo "設定開機自啟動..."
systemctl enable postgresql-12

echo "PostgreSQL 12.3 安裝完成!"           

安裝日志

[root@VM-4-9-centos ~]# chmod +x install_postgres.sh
[root@VM-4-9-centos ~]# 
[root@VM-4-9-centos ~]# 
[root@VM-4-9-centos ~]# ls /etc/yum.repos.d/
CentOS-Base.repo  CentOS-Epel.repo  docker-ce.repo  docker.repo  rancher-k3s-common.repo
[root@VM-4-9-centos ~]# sh install_postgres.sh 
設定國内鏡像源...
安裝 PostgreSQL 12.3...
已加載插件:fastestmirror, langpacks
Determining fastest mirrors
docker                                                                                                                                                                   | 3.5 kB  00:00:00     
docker-ce-stable                                                                                                                                                         | 3.5 kB  00:00:00     
epel                                                                                                                                                                     | 4.7 kB  00:00:00     
extras                                                                                                                                                                   | 2.9 kB  00:00:00     
os                                                                                                                                                                       | 3.6 kB  00:00:00     
pgdg12                                                                                                                                                                   | 3.6 kB  00:00:00     
rancher-k3s-common-stable                                                                                                                                                | 2.9 kB  00:00:00     
updates                                                                                                                                                                  | 2.9 kB  00:00:00     
(1/9): epel/7/x86_64/group_gz                                                                                                                                            |  99 kB  00:00:00     
(2/9): epel/7/x86_64/updateinfo                                                                                                                                          | 1.0 MB  00:00:00     
(3/9): docker/primary_db                                                                                                                                                 | 111 kB  00:00:00     
(4/9): pgdg12/group_gz                                                                                                                                                   |  245 B  00:00:00     
(5/9): pgdg12/primary_db                                                                                                                                                 | 383 kB  00:00:00     
(6/9): epel/7/x86_64/primary_db                                                                                                                                          | 7.0 MB  00:00:00     
(7/9): docker-ce-stable/7/x86_64/primary_db                                                                                                                              | 111 kB  00:00:00     
(8/9): rancher-k3s-common-stable/primary_db                                                                                                                              | 4.4 kB  00:00:01     
(9/9): updates/7/x86_64/primary_db                                                                                                                                       |  22 MB  00:00:01     
正在解決依賴關系
There are unfinished transactions remaining. You might consider running yum-complete-transaction, or "yum-complete-transaction --cleanup-only" and "yum history redo last", first to finish them. If those don't work you'll have to try removing/installing packages by hand (maybe package-cleanup can help).
--> 正在檢查事務
---> 軟體包 postgresql12-server.x86_64.0.12.15-1PGDG.rhel7 将被 安裝
--> 正在處理依賴關系 postgresql12-libs(x86-64) = 12.15-1PGDG.rhel7,它被軟體包 postgresql12-server-12.15-1PGDG.rhel7.x86_64 需要
--> 正在處理依賴關系 postgresql12(x86-64) = 12.15-1PGDG.rhel7,它被軟體包 postgresql12-server-12.15-1PGDG.rhel7.x86_64 需要
--> 正在處理依賴關系 libpq.so.5()(64bit),它被軟體包 postgresql12-server-12.15-1PGDG.rhel7.x86_64 需要
--> 正在檢查事務
---> 軟體包 postgresql12.x86_64.0.12.15-1PGDG.rhel7 将被 安裝
---> 軟體包 postgresql12-libs.x86_64.0.12.15-1PGDG.rhel7 将被 安裝
--> 解決依賴關系完成

依賴關系解決

================================================================================================================================================================================================
 Package                                              架構                                    版本                                                源                                       大小
================================================================================================================================================================================================
正在安裝:
 postgresql12-server                                  x86_64                                  12.15-1PGDG.rhel7                                   pgdg12                                  5.0 M
為依賴而安裝:
 postgresql12                                         x86_64                                  12.15-1PGDG.rhel7                                   pgdg12                                  1.6 M
 postgresql12-libs                                    x86_64                                  12.15-1PGDG.rhel7                                   pgdg12                                  377 k

事務概要
================================================================================================================================================================================================
安裝  1 軟體包 (+2 依賴軟體包)

總下載下傳量:7.0 M
安裝大小:30 M
Downloading packages:
(1/3): postgresql12-libs-12.15-1PGDG.rhel7.x86_64.rpm                                                                                                                    | 377 kB  00:00:00     
(2/3): postgresql12-12.15-1PGDG.rhel7.x86_64.rpm                                                                                                                         | 1.6 MB  00:00:00     
(3/3): postgresql12-server-12.15-1PGDG.rhel7.x86_64.rpm                                                                                                                  | 5.0 MB  00:00:00     
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
總計                                                                                                                                                             10 MB/s | 7.0 MB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安裝    : postgresql12-libs-12.15-1PGDG.rhel7.x86_64                                                                                                                                  1/3 
  正在安裝    : postgresql12-12.15-1PGDG.rhel7.x86_64                                                                                                                                       2/3 
  正在安裝    : postgresql12-server-12.15-1PGDG.rhel7.x86_64                                                                                                                                3/3 
  驗證中      : postgresql12-12.15-1PGDG.rhel7.x86_64                                                                                                                                       1/3 
  驗證中      : postgresql12-server-12.15-1PGDG.rhel7.x86_64                                                                                                                                2/3 
  驗證中      : postgresql12-libs-12.15-1PGDG.rhel7.x86_64                                                                                                                                  3/3 

已安裝:
  postgresql12-server.x86_64 0:12.15-1PGDG.rhel7                                                                                                                                                

作為依賴被安裝:
  postgresql12.x86_64 0:12.15-1PGDG.rhel7                                                      postgresql12-libs.x86_64 0:12.15-1PGDG.rhel7                                                     

完畢!
初始化資料庫...
Initializing database ... OK

啟動 PostgreSQL 12.3...
設定開機自啟動...
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-12.service to /usr/lib/systemd/system/postgresql-12.service.
PostgreSQL 12.3 安裝完成!
[root@VM-4-9-centos ~]#            

為postgresql設定密碼

  1. 打開終端或指令提示符視窗,并以超級使用者身份登入到 PostgreSQL 資料庫伺服器。可以使用以下指令登入:
  2. sudo -u postgres psql
  3. 如果提示輸入密碼,請輸入您目前作業系統使用者的密碼。
  4. 進入 PostgreSQL 資料庫指令行提示符後,使用以下指令為特定的資料庫使用者設定密碼。将 <username> 替換為您要設定密碼的資料庫使用者名:
  5. ALTER USER <username> WITH PASSWORD 'your_password';
  6. 例如,要為使用者 myuser 設定密碼為 mypassword,可以執行以下指令:
  7. ALTER USER myuser WITH PASSWORD 'mypassword';
  8. 設定密碼後,可以使用以下指令退出 PostgreSQL 資料庫指令行提示符:
  9. \q

安裝後檔案位置

通過上述腳本安裝的 PostgreSQL,在 CentOS 7 上的預設安裝位置如下:

  1. 安裝檔案: PostgreSQL 二進制檔案和可執行檔案位于 /usr/pgsql-12/bin 目錄下。 PostgreSQL 庫檔案位于 /usr/pgsql-12/lib 目錄下。 PostgreSQL 插件檔案位于 /usr/pgsql-12/share/extension 目錄下。
  2. 配置檔案: 主要的 PostgreSQL 配置檔案 postgresql.conf 位于 /var/lib/pgsql/12/data 目錄下。 pg_hba.conf 檔案,用于配置用戶端身份驗證規則,也位于 /var/lib/pgsql/12/data 目錄下。

請注意,/var/lib/pgsql/12/data 是預設的資料目錄,其中包含資料庫的資料檔案和配置檔案。您可以通過修改 postgresql.conf 檔案來更改資料目錄的位置。

[root@VM-4-9-centos ~]# tree -L 2 /usr/pgsql-12/
/usr/pgsql-12/
├── bin
│   ├── clusterdb
│   ├── createdb
│   ├── createuser
│   ├── dropdb
│   ├── dropuser
│   ├── initdb
│   ├── pg_archivecleanup
│   ├── pg_basebackup
│   ├── pgbench
│   ├── pg_checksums
│   ├── pg_config
│   ├── pg_controldata
│   ├── pg_ctl
│   ├── pg_dump
│   ├── pg_dumpall
│   ├── pg_isready
│   ├── pg_receivewal
│   ├── pg_resetwal
│   ├── pg_restore
│   ├── pg_rewind
│   ├── pg_test_fsync
│   ├── pg_test_timing
│   ├── pg_upgrade
│   ├── pg_waldump
│   ├── postgres
│   ├── postgresql-12-check-db-dir
│   ├── postgresql-12-setup
│   ├── postmaster -> postgres
│   ├── psql
│   ├── reindexdb
│   └── vacuumdb
├── lib
│   ├── ascii_and_mic.so
│   ├── bitcode
│   ├── cyrillic_and_mic.so
│   ├── dict_int.so
│   ├── dict_snowball.so
│   ├── dict_xsyn.so
│   ├── euc2004_sjis2004.so
│   ├── euc_cn_and_mic.so
│   ├── euc_jp_and_sjis.so
│   ├── euc_kr_and_mic.so
│   ├── euc_tw_and_big5.so
│   ├── latin2_and_win1250.so
│   ├── latin_and_mic.so
│   ├── libecpg_compat.so.3 -> libecpg_compat.so.3.12
│   ├── libecpg_compat.so.3.12
│   ├── libecpg.so -> libecpg.so.6.12
│   ├── libecpg.so.6 -> libecpg.so.6.12
│   ├── libecpg.so.6.12
│   ├── libpgfeutils.a
│   ├── libpgtypes.so.3 -> libpgtypes.so.3.12
│   ├── libpgtypes.so.3.12
│   ├── libpq.so.5 -> libpq.so.5.12
│   ├── libpq.so.5.12
│   ├── libpqwalreceiver.so
│   ├── pgoutput.so
│   ├── plpgsql.so
│   ├── utf8_and_ascii.so
│   ├── utf8_and_big5.so
│   ├── utf8_and_cyrillic.so
│   ├── utf8_and_euc2004.so
│   ├── utf8_and_euc_cn.so
│   ├── utf8_and_euc_jp.so
│   ├── utf8_and_euc_kr.so
│   ├── utf8_and_euc_tw.so
│   ├── utf8_and_gb18030.so
│   ├── utf8_and_gbk.so
│   ├── utf8_and_iso8859_1.so
│   ├── utf8_and_iso8859.so
│   ├── utf8_and_johab.so
│   ├── utf8_and_sjis2004.so
│   ├── utf8_and_sjis.so
│   ├── utf8_and_uhc.so
│   └── utf8_and_win.so
└── share
    ├── errcodes.txt
    ├── extension
    ├── information_schema.sql
    ├── locale
    ├── man
    ├── pg_hba.conf.sample
    ├── pg_ident.conf.sample
    ├── pg_service.conf.sample
    ├── postgres.bki
    ├── postgres.description
    ├── postgresql-12-libs.conf
    ├── postgresql.conf.sample
    ├── postgres.shdescription
    ├── psqlrc.sample
    ├── snowball_create.sql
    ├── sql_features.txt
    ├── system_views.sql
    ├── timezonesets
    └── tsearch_data           

以下是該目錄結構的摘要:

  • bin 目錄:包含 PostgreSQL 12 可執行檔案,如 initdb、pg_dump、pg_restore、psql 等。
  • lib 目錄:包含 PostgreSQL 12 的庫檔案,如 libecpg.so、libpgtypes.so、libpq.so 等。
  • share 目錄:包含 PostgreSQL 12 的共享檔案,如 extension 目錄(包含擴充子產品)、locale 目錄(包含語言環境檔案)、man 目錄(包含手冊頁)、pg_hba.conf.sample(身份驗證規則示例檔案)、postgresql.conf.sample(配置檔案示例)等。

安裝 PostgreSQL 時,以下是一些主要檔案和目錄的功能和作用的詳細解釋:

  1. bin 目錄: initdb:用于建立新的 PostgreSQL 資料庫叢集(資料目錄)。 pg_dump:用于将資料庫導出為 SQL 腳本或二進制備份檔案。 pg_restore:用于将使用 pg_dump 建立的備份檔案恢複到資料庫。 psql:PostgreSQL 的指令行用戶端工具,用于與資料庫進行互動、執行查詢和管理資料庫。 其他指令:用于資料庫叢集管理、備份和恢複等。
  2. lib 目錄: libecpg.so、libpgtypes.so、libpq.so:PostgreSQL 的庫檔案,提供了與用戶端應用程式互動的接口。 pgoutput.so:用于邏輯複制的插件,允許将更改從一個 PostgreSQL 資料庫傳遞到另一個。 plpgsql.so:用于支援 PL/pgSQL 語言的插件,PL/pgSQL 是 PostgreSQL 中的一種過程化程式設計語言。 其他庫檔案:提供了其他特定功能和擴充的支援。
  3. share 目錄: extension 目錄:包含 PostgreSQL 的擴充子產品,可以通過加載這些子產品來添加額外的功能和特性。 locale 目錄:包含用于國際化和本地化支援的語言環境檔案,如翻譯檔案和排序規則。 man 目錄:包含 PostgreSQL 的手冊頁,可用于檢視關于 PostgreSQL 的詳細文檔和幫助資訊。 pg_hba.conf.sample:身份驗證配置檔案示例,用于定義用戶端連接配接到資料庫時的身份驗證規則。 postgresql.conf.sample:配置檔案示例,用于配置資料庫伺服器的各種參數和設定。
[root@VM-4-9-centos ~]# ls /var/lib/pgsql/12/
backups  data  initdb.log
[root@VM-4-9-centos ~]# 
[root@VM-4-9-centos ~]# 
[root@VM-4-9-centos ~]# ls /var/lib/pgsql/12/data
base              global  pg_commit_ts  pg_hba.conf    pg_logical    pg_notify    pg_serial     pg_stat      pg_subtrans  pg_twophase  pg_wal   postgresql.auto.conf  postmaster.opts
current_logfiles  log     pg_dynshmem   pg_ident.conf  pg_multixact  pg_replslot  pg_snapshots  pg_stat_tmp  pg_tblspc    PG_VERSION   pg_xact  postgresql.conf       postmaster.pid           
  • base 目錄:該目錄包含資料庫的表空間。每個資料庫都有一個子目錄,其中存儲了該資料庫的表、索引和資料檔案。
  • global 目錄:該目錄存儲了全局共享資料,包括系統表空間、資料庫模闆和其他全局對象。
  • pg_commit_ts 目錄:該目錄包含與事務送出時間戳相關的資訊,用于支援進階功能如并發控制和MVCC。
  • pg_hba.conf:這是 PostgreSQL 的身份驗證配置檔案,用于定義用戶端連接配接到資料庫時的身份驗證規則。
  • pg_logical 目錄:如果您啟用了邏輯複制功能,該目錄将包含用于邏輯複制的相關檔案。
  • pg_notify 目錄:該目錄用于存儲通過 LISTEN 和 NOTIFY 實作的資料庫通知功能的相關資訊。
  • pg_replslot 目錄:如果您啟用了流複制功能,該目錄将包含用于複制槽的相關檔案。
  • pg_serial 目錄:如果您使用了 SERIAL 資料類型,該目錄将包含與序列相關的檔案。
  • pg_snapshots 目錄:該目錄用于存儲并發事務的快照資訊。
  • pg_stat 目錄:該目錄包含統計資訊,用于跟蹤資料庫伺服器的活動和性能。
  • pg_stat_tmp 目錄:該目錄用于存儲臨時統計資訊。
  • pg_subtrans 目錄:該目錄包含與子事務相關的資訊,用于支援并發控制和MVCC。
  • pg_tblspc 目錄:該目錄包含額外的表空間,如果您建立了其他表空間,其檔案将存儲在這個目錄下。
  • pg_twophase 目錄:該目錄包含兩階段送出事務的資訊。
  • pg_wal 目錄:該目錄存儲事務日志(WAL)檔案,用于支援資料庫的持久性和恢複功能。
  • postgresql.auto.conf:這是一個自動生成的配置檔案,記錄了自動配置的設定和參數。
  • postgresql.conf:這是主要的 PostgreSQL 配置檔案,用于手動配置資料庫伺服器的各種參數和設定。
  • postmaster.opts:這個檔案儲存了啟動 PostgreSQL 資料庫伺服器時使用的指令行選項。
  • PG_VERSION:該檔案中包含了目前 PostgreSQL 資料目錄的版本号。
  • pg_xact 目錄:該目錄包含與事務相關的資訊,用于支援并發控制和MVCC。
  • postmaster.pid:這個檔案包含了 PostgreSQL 資料庫伺服器的程序 ID。

這些檔案和目錄是 PostgreSQL 資料庫的重要組成部分,它們存儲了資料庫的資料、配置和中繼資料資訊,為資料庫的運作和管理提供了必要的支援。

配置檔案 postgresql.conf 詳解

postgresql.conf 是 PostgreSQL 資料庫的主要配置檔案,它用于配置資料庫伺服器的各種參數和設定。以下是一些常見配置選項的詳細解釋:

  1. listen_addresses:指定 PostgreSQL 監聽的 IP 位址或主機名。預設情況下,它設定為 localhost,隻允許本地連接配接。您可以将其設定為 *,以允許所有 IP 位址的連接配接,或指定特定的 IP 位址。
  2. port:指定 PostgreSQL 資料庫伺服器監聽的端口号。預設端口是 5432。您可以根據需要更改該端口。
  3. max_connections:指定資料庫伺服器允許的最大并發連接配接數。預設值是 100。根據您的硬體資源和應用程式需求,您可以調整這個值。
  4. shared_buffers:指定資料庫伺服器用于緩存資料和索引的共享記憶體緩沖區大小。該值通常設定為系統記憶體的一小部分,以提高性能。預設值是 128MB。
  5. work_mem:指定每個資料庫會話可以使用的記憶體量,用于排序和哈希操作等臨時工作記憶體。預設值是 4MB。根據查詢和工作負載的需求,您可以适當調整這個值。
  6. maintenance_work_mem:指定在執行維護操作(如 VACUUM、INDEX 建立等)時,允許的最大記憶體使用量。預設值是 64MB。根據資料庫的大小和維護操作的複雜性,您可能需要調整這個值。
  7. effective_cache_size:指定 PostgreSQL 估計的系統緩存大小。該值用于查詢優化器決策,以估計可用的磁盤緩存。預設值是 4GB。根據系統的實際記憶體和磁盤緩存容量,您可以調整這個值。
  8. log_destination:指定日志消息的輸出目标。可以設定為 stderr、csvlog、syslog 或 eventlog。預設值是 stderr,即輸出到标準錯誤流。
  9. logging_collector:指定是否啟用日志收集器。如果設定為 on,PostgreSQL 将使用獨立的程序收集和記錄日志消息。預設值是 off。
  10. log_directory:指定日志檔案的存儲目錄。預設情況下,日志檔案存儲在 PostgreSQL 資料目錄中的 pg_log 子目錄下。
  11. log_filename:指定日志檔案的名稱模闆。預設情況下,日志檔案以 postgresql-%Y-%m-%d_%H%M%S.log 的格式命名。
  12. log_rotation_age:指定日志檔案自動輪換的時間間隔。預設值是 1d,表示每天輪換一次日志檔案。
  13. log_rotation_size:指定日志檔案自動輪換的大小門檻值。預設值是 10MB,表示當日志檔案達到這個大小時,将進行輪換。
  14. autovacuum:指定是否啟用自動化 VACUUM 和 ANALYZE 程序。預設值是 on,表示啟用自動化維護程序。
  15. max_wal_size:指定 WAL(Write-Ahead Log)日志檔案的最大大小。預設值是 1GB。根據資料庫的寫入負載和恢複需求,您可以調整這個值。

這些隻是 postgresql.conf 配置檔案中的一些常見選項,還有其他許多選項可以根據您的特定需求進行配置。在修改配置檔案之前,建議了解每個選項的含義和影響,并根據您的應用程式和硬體環境進行适當的調整。