postgresql 下載安裝

有形无形發表於2024-10-28
一、postgresql 下載
pg官網:postgres.org

一般推薦用原始碼安裝,下載 .tar.gz 包

二、安裝
本文以12.6版本安裝為例:
2.1、安裝前要求和環境配置
# 1、要求GNU make版本3.80或以上(GNU make有時以名字gmake安裝),要測試make版本可以使用以下命令(如果是安裝其他版本的pg具體要求make的版本詳情見官網對應版本的安裝文件):
[root@xl001 ~]# make --version
GNU Make 3.82

# 2、安裝依賴包
yum install -y gcc gcc-c++ epel-release llvm5.0 llvm5.0-devel clang libicu-devel perl-ExtUtils-Embed readline readline-devel zlib zlib-devel openssl openssl-devel pam-devel libxml2-devel libxslt-devel openldap-devel systemd-devel tcl-devel python-devel

正常情況下,OS已經幫我們把一些包已經裝好了,只需要安裝以下三個包就好
yum -y install readline-devel zlib-devel gcc


# 3、關閉防火牆
systemctl disable firewalld
systemctl stop firewalld

# 4、建立postgres使用者
useradd postgres 
passwd postgres  # 設定密碼

# 5、系統引數調優
# 5.1、修改系統核心引數
vi /etc/sysctl.conf
# 主要是修改三個引數
kernel.shmall=expr `free |grep Mem|awk '{print $2 *1024}'` / `getconf PAGE_SIZE`
kernel.shmmax=free |grep Mem|awk '{print $2 *1024}'
vm.nr_hugepages

引數解釋:
kernel.shmall 表示核心可以為共享記憶體分配的最大頁數(pages),這裡的“頁”是指核心的頁面大小,預設通常是 4KB。
kernel.shmmax 設定了單個共享記憶體段的最大最大位元組數
vm.nr_hugepages 引數用於指定系統中可以分配的大頁數量

# 其他引數
fs.file-max = 6815744                      
kernel.sem = 10000  10240000 10000 1024   
kernel.shmmni = 819200                                      
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_max = 1048576
fs.aio-max-nr = 40960000
vm.dirty_ratio=20
vm.dirty_background_ratio=3
vm.dirty_writeback_centisecs=3000
vm.dirty_expire_centisecs=500
vm.swappiness=10
vm.min_free_kbytes=524288

sysctl -p  #即時生效

# 修改最大程序數和檔案控制代碼數
vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535

postgres soft nofile 65535
postgres  hard nofile 65535
postgres  soft nproc 65535
postgres  hard nproc 65535

# 6、建立目錄
mkdir -p /opt/pgsql-12.6
mkdir -p /opt/pgdata/data
mkdir -p /opt/pgdata/wal
mkdir -p /opt/pgdata/archive
mkdir -p /opt/pgdata/logs
chown -R postgres:postgres /opt/pgsql-12.6/ /opt/pgdata


# 7、配置postgres環境變數
su - postgres
vim .bash_profile
 
export PGHOME=/opt/pgsql-12.6
export PGDATA=/opt/pgdata/data
export PGHOST=/opt/pgdata/data
export PGUSER=postgres
export PGPORT=5432
export PATH=$HOME/bin:$PGHOME/bin:$PATH
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
 
source .bash_profile

2.2、安裝
# 1、上傳安裝包並解壓
tar -zxvf postgresql-12.6.tar.gz
cd postgresql-12.6
./configure --prefix=/opt/pgsql-12.6 --with-pgport=5432   # 設定安裝目錄和埠

# 解釋
./configure 這一步可以設定一些引數,具體可./configure -h 檢視


# 2、安裝
gmake world                  #這個命令是全部功能安裝,也可以精細化部署,具體可以參考官網
gmake install-world
chown -R postgres:postgres /opt/pgsql-12.6

# 3、初始化資料庫
/opt/pgsql-12.6/bin/initdb -D /opt/pgdata/data

# 4、編輯配置檔案pg_hba.conf,此配置控制的是連線資料庫相關,檔案中配置的ip才可以連線資料庫,沒配置的都不能連線
vim /opt/pgdata/data/pg_hba.conf


	# TYPE  DATABASE        USER            ADDRESS                 METHOD


	# "local" is for Unix domain socket connections only
	local   all             all                                     trust                        # 此行ADDRESS沒有值,代表是socket連線
	# IPv4 local connections:
	host    all             all             127.0.0.1/32            trust                        #若這一行沒有,則表示在本地不能用tcp/ip方式連線
	host    all             all             0.0.0.0/0               trust 
	
	###如果出現兩個相同的配置,則下面的不起作用,比如
	host    all             all             192.168.225.0/24        reject 
	host    all             all             192.168.225.201/24      MD5               #例如這兩個配置,比如有個連線從客戶端192.168.225.201過來,讀到上面的配置,
	                                                                                  #因為192.168.225.201滿足192.168.225.0/24,所以連線被拒絕,即使在讀到下面一條可以連線,也不會生效了,最終就是連線被拒絕
	# IPv6 local connections:
	host    all             all             ::1/128                 trust
	# Allow replication connections from localhost, by a user with the
	# replication privilege.
	local   replication     all                                     trust
	host    replication     all             127.0.0.1/32            trust
	host    replication     all             ::1/128                 trust


# 5、修改配置檔案postgresql.conf
vim /opt/pgdata/dataa/postgresql.con
listen_addresses = 'localhost'      #把localhost改為*,預設是隻能本地連線

# 6、啟動資料庫
pg_ctl -D /opt/pgdata start    

# pg修改配置檔案後可以動態載入,不用重啟資料庫
pg_ctl -D /opt/pgdata/data reload

# 7、關閉資料庫
pg_ctl -D /opt/pgdata stop -m smart|fast|immediate   #smart,會等到所有客戶端連線都斷開始之後才關閉,fast會kill掉所有連線回滾所有還未完成的事務然後關閉(預設方式),immediate相當於直接kill -9程序,不建議
pg_ctl -D /opt/pgdata/data stop -mf


# 8、設定密碼
[postgres@xl001 data]$ psql -Upostgres -h127.0.0.1 -dpostgres -p5432 -W 
psql (12.6)
Type "help" for help.

postgres=# \password
Enter new password: 
Enter it again: 
postgres=# 


2.3、附一份常用的postgresql.conf配置檔案
點選檢視程式碼
listen_addresses = '*'
port = 6010
cluster_name ='rmse'
max_connections = 500
unix_socket_directories ='/opt/pgdata/data'    #socket檔案(.s.PGSQL.5432) 目錄,預設在/tmp下,
若指定在別的目錄下,用socket 登入時需要指定socket的目錄,例如 pgsql -h /opt/pgdata/rmse/data -dpostgres,
若不想指定-h,則需要配置環境變數export PGHOST=/opt/pgdata/rmse/data 
                 
unix_socket_group = 'postgres'
unix_socket_permissions = 0700
shared_buffers = 4GB
dynamic_shared_memory_type = posix
temp_buffers = 2GB            #用於存放資料庫會話訪問臨時表資料,預設值8MB
work_mem = 32MB               #內部排序聚合操作和hash表在使用臨時磁碟檔案時使用的記憶體緩衝區,需要關注的是:每個排序操作都會消耗一個work_mem記憶體,並不是一個SQL消耗一個,因此,當您的系統中有大量的排序時,此值可適當調小,防止記憶體用盡
maintenance_work_mem = 4GB    #維護操作(如VACUUM、CREATE INDEX、ALTER TABLE ADD FOREIGN KEY等)使用的記憶體緩衝區
wal_level = logical
checkpoint_timeout = 5min     #多久執行一次checkpoint 刷髒,預設300秒
max_wal_size = 10GB           #指定每兩個checkpoint檢查點之間產生的WAL最大量,當堆積的WAL檔案總大小超過max_wal_size的話會立馬觸發一個checkpoint
min_wal_size = 1GB            #只要所有WAL檔案總大小保持低於此設定,舊的WAL檔案將始終在checkpoint時被回收以備將來使用,而不是被刪除。一個wal 檔案大小預設是16M
archive_mode = always         #off:關閉歸檔,on:開啟歸檔,但不允許在recovery模式下進行歸檔,always:開啟歸檔,且允許在recovery模式下進行歸檔
archive_command = 'cp %p /opt/pgdata/rmse/archive/%f'
max_wal_senders = 10
wal_keep_segments = 512    #主備條件下,為備庫同步保留的日誌檔案段。那麼大約就有512*16=8GB的數
wal_buffers = -1           #設定成-1就是隨著shared_buffers的改變而改變,大約是1/32*shared_buffers,修改此引數需要重啟
wal_log_hints = on
effective_io_concurrency = 200
max_worker_processes = 4
max_parallel_workers = 4
max_replication_slots = 8
hot_standby = on
synchronous_commit = on
logging_collector = on
log_destination = csvlog
log_directory = '/opt/pgdata/logs'
log_filename = 'postgresql-%Y-%m-%d.log'
log_file_mode = 0600
log_truncate_on_rotation = on   #當日志檔案已存在時,該配置如果為off,新生成的日誌將在檔案尾部追加,如果為on,則會覆蓋原來的日誌。
log_rotation_age = 1d           #單個日誌檔案的生存期,預設1天,在日誌檔案大小沒有達到log_rotation_size時,一天只生成一個日誌檔案
log_min_messages = warning
log_min_duration_statement = 30s  #慢sql,-1 表示不開啟,0表示記錄所有sql
log_checkpoints = on      #檢查點和重啟點被記錄在伺服器日誌中
log_connections = off     #使用者session登陸時是否寫入日誌,預設off
log_duration = off        #記錄sql執行時間       
log_lock_waits = on       #鎖相關資訊記錄到日誌
log_statement = 'none'     # none, ddl, mod, all 控制記錄哪些SQL語句。none不記錄,ddl記錄所有資料定義命令,比如CREATE,ALTER,和DROP 語句。mod記錄所有ddl語句,加上資料修改語句INSERT,UPDATE等,all記錄所有執行的語句
log_timezone = 'UTC'       # 日誌時區,例如UTC,Asia/Shanghai,最好和伺服器設定相同的時區
track_activities = on    # 用於控制是否記錄關於會話活動的統計資訊,設定此引數後,PostgreSQL 會在 pg_stat_activity 檢視中記錄有關當前活動會話的資訊。預設on
track_counts = on        # 用於控制是否記錄表和索引的行數統計資訊。這些統計資訊可以幫助最佳化器做出更準確的查詢計劃,從而提高查詢效能。預設on
track_io_timing = on     # 用於控制是否記錄磁碟 I/O 操作的詳細時序資訊,預設off
track_functions = all    # 用於控制是否記錄函式呼叫的統計資訊,預設none,有以下幾個值
	none:不記錄任何函式呼叫的統計資訊。
	all:記錄所有函式呼叫的統計資訊。
	pl:記錄 PL/pgSQL 函式呼叫的統計資訊。
	sql:記錄 SQL 函式呼叫的統計資訊。
	ddl:記錄資料定義語言(DDL)函式呼叫的統計資訊

datestyle = 'iso, mdy'    # 用於控制日期和時間資料的顯示格式,預設值通常是 "ISO, MDY",表示使用ISO 格式,並按照年-月-日的順序顯示日期。
timezone = 'UTC'
lc_messages = 'en_US.utf8'   # 用於設定資料庫管理系統(DBMS)發出的訊息的語言,預設值是en_US.utf8
lc_monetary = 'en_US.utf8'
lc_numeric = 'en_US.utf8'
lc_time = 'en_US.utf8'
random_page_cost = 1.1    # random_page_cost 的值是一個浮點數,表示隨機磁碟訪問的成本。這個值越大,表示最佳化器認為隨機磁碟訪問越昂貴,從而可能傾向於選擇那些能夠減少隨機磁碟訪問次數的查詢計劃。預設值4.0
autovacuum = on
log_autovacuum_min_duration = 0
autovacuum_vacuum_cost_delay = 0
autovacuum_max_workers = 4
autovacuum_naptime = 15
default_text_search_config = 'pg_catalog.english'
shared_preload_libraries = 'pg_stat_statements,pgstattuple,pg_buffercache,postgres_fdw'

至此,postgresql 安裝完畢

相關文章