PostgreSQL是一個開源的關系型資料庫管理系統(RDBMS),它有多個版本和釋出系列。
以下是一些常見的 PostgreSQL 版本:
- PostgreSQL 9.x 系列:這是較舊的穩定版本系列,包括9.0、9.1、9.2、9.3、9.4、9.5、9.6等版本。
- PostgreSQL 10.x 系列:這是較新的穩定版本系列,包括10.0、10.1、10.2、10.3、10.4等版本。
- PostgreSQL 11.x 系列:這是較新的穩定版本系列,包括11.0、11.1、11.2、11.3等版本。
- PostgreSQL 12.x 系列:這是較新的穩定版本系列,包括12.0、12.1、12.2等版本。
- 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設定密碼
- 打開終端或指令提示符視窗,并以超級使用者身份登入到 PostgreSQL 資料庫伺服器。可以使用以下指令登入:
- sudo -u postgres psql
- 如果提示輸入密碼,請輸入您目前作業系統使用者的密碼。
- 進入 PostgreSQL 資料庫指令行提示符後,使用以下指令為特定的資料庫使用者設定密碼。将 <username> 替換為您要設定密碼的資料庫使用者名:
- ALTER USER <username> WITH PASSWORD 'your_password';
- 例如,要為使用者 myuser 設定密碼為 mypassword,可以執行以下指令:
- ALTER USER myuser WITH PASSWORD 'mypassword';
- 設定密碼後,可以使用以下指令退出 PostgreSQL 資料庫指令行提示符:
- \q
安裝後檔案位置
通過上述腳本安裝的 PostgreSQL,在 CentOS 7 上的預設安裝位置如下:
- 安裝檔案: PostgreSQL 二進制檔案和可執行檔案位于 /usr/pgsql-12/bin 目錄下。 PostgreSQL 庫檔案位于 /usr/pgsql-12/lib 目錄下。 PostgreSQL 插件檔案位于 /usr/pgsql-12/share/extension 目錄下。
- 配置檔案: 主要的 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 時,以下是一些主要檔案和目錄的功能和作用的詳細解釋:
- bin 目錄: initdb:用于建立新的 PostgreSQL 資料庫叢集(資料目錄)。 pg_dump:用于将資料庫導出為 SQL 腳本或二進制備份檔案。 pg_restore:用于将使用 pg_dump 建立的備份檔案恢複到資料庫。 psql:PostgreSQL 的指令行用戶端工具,用于與資料庫進行互動、執行查詢和管理資料庫。 其他指令:用于資料庫叢集管理、備份和恢複等。
- lib 目錄: libecpg.so、libpgtypes.so、libpq.so:PostgreSQL 的庫檔案,提供了與用戶端應用程式互動的接口。 pgoutput.so:用于邏輯複制的插件,允許将更改從一個 PostgreSQL 資料庫傳遞到另一個。 plpgsql.so:用于支援 PL/pgSQL 語言的插件,PL/pgSQL 是 PostgreSQL 中的一種過程化程式設計語言。 其他庫檔案:提供了其他特定功能和擴充的支援。
- 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 資料庫的主要配置檔案,它用于配置資料庫伺服器的各種參數和設定。以下是一些常見配置選項的詳細解釋:
- listen_addresses:指定 PostgreSQL 監聽的 IP 位址或主機名。預設情況下,它設定為 localhost,隻允許本地連接配接。您可以将其設定為 *,以允許所有 IP 位址的連接配接,或指定特定的 IP 位址。
- port:指定 PostgreSQL 資料庫伺服器監聽的端口号。預設端口是 5432。您可以根據需要更改該端口。
- max_connections:指定資料庫伺服器允許的最大并發連接配接數。預設值是 100。根據您的硬體資源和應用程式需求,您可以調整這個值。
- shared_buffers:指定資料庫伺服器用于緩存資料和索引的共享記憶體緩沖區大小。該值通常設定為系統記憶體的一小部分,以提高性能。預設值是 128MB。
- work_mem:指定每個資料庫會話可以使用的記憶體量,用于排序和哈希操作等臨時工作記憶體。預設值是 4MB。根據查詢和工作負載的需求,您可以适當調整這個值。
- maintenance_work_mem:指定在執行維護操作(如 VACUUM、INDEX 建立等)時,允許的最大記憶體使用量。預設值是 64MB。根據資料庫的大小和維護操作的複雜性,您可能需要調整這個值。
- effective_cache_size:指定 PostgreSQL 估計的系統緩存大小。該值用于查詢優化器決策,以估計可用的磁盤緩存。預設值是 4GB。根據系統的實際記憶體和磁盤緩存容量,您可以調整這個值。
- log_destination:指定日志消息的輸出目标。可以設定為 stderr、csvlog、syslog 或 eventlog。預設值是 stderr,即輸出到标準錯誤流。
- logging_collector:指定是否啟用日志收集器。如果設定為 on,PostgreSQL 将使用獨立的程序收集和記錄日志消息。預設值是 off。
- log_directory:指定日志檔案的存儲目錄。預設情況下,日志檔案存儲在 PostgreSQL 資料目錄中的 pg_log 子目錄下。
- log_filename:指定日志檔案的名稱模闆。預設情況下,日志檔案以 postgresql-%Y-%m-%d_%H%M%S.log 的格式命名。
- log_rotation_age:指定日志檔案自動輪換的時間間隔。預設值是 1d,表示每天輪換一次日志檔案。
- log_rotation_size:指定日志檔案自動輪換的大小門檻值。預設值是 10MB,表示當日志檔案達到這個大小時,将進行輪換。
- autovacuum:指定是否啟用自動化 VACUUM 和 ANALYZE 程序。預設值是 on,表示啟用自動化維護程序。
- max_wal_size:指定 WAL(Write-Ahead Log)日志檔案的最大大小。預設值是 1GB。根據資料庫的寫入負載和恢複需求,您可以調整這個值。
這些隻是 postgresql.conf 配置檔案中的一些常見選項,還有其他許多選項可以根據您的特定需求進行配置。在修改配置檔案之前,建議了解每個選項的含義和影響,并根據您的應用程式和硬體環境進行适當的調整。