1. 程式人生 > 其它 >編譯安裝postgresql 12.6及常用指令

編譯安裝postgresql 12.6及常用指令

目錄

postgresql官網地址:https://www.postgresql.org/

postgresql中文社群:

http://www.postgres.cn/

本篇博文主要記錄如何原始碼安裝postgresql 12.6 !

一、前期準備

1.1 建立postgres使用者

$ useradd postgres
$ echo postgres | passwd --stdin postgres

1.2 安裝依賴包

$ yum groupinstall -y "Development Tools" "Legacy UNIX Compatibility"
$ yum install -y bison flex readline* zlib-devel gcc* gmake

1.3 系統引數優化

# 核心優化
$ cat >> /etc/sysctl.conf << EOF
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
kernel.shmmni = 4096
kernel.sem = 50100 64128000 50100 1280
fs.file-max = 7672460
net.ipv4.ip_local_port_range = 9000 65000
net.core.rmem_default = 1048576
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
EOF
$ sysctl -p

$ cat >> /etc/security/limits.conf << EOF
*               soft    nofile          131072
*               soft    nproc           131072
*               hard    nproc           131072
*               soft    core            unlimited
*               hard    core            unlimited
*               soft    memlock         50000000
*               hard    memlock         50000000
EOF

1.4 建立postgres相關目錄

$ mkdir -p /usr/local/pg12
$ mkdir -p /pgdata/12/data
$ chown -R postgres. /pgdata
$ chown -R postgres. /usr/local/pg12
$ chmod -R 700 /pgdata/12/data/

二、原始碼安裝postgresql

2.1 下載軟體包並編譯安裝

$ cd /opt
$ wget https://mirrors.tuna.tsinghua.edu.cn/postgresql/source/v12.6/postgresql-12.6.tar.gz
$ tar xf postgresql-12.6.tar.gz 
$ cd postgresql-12.6/
$ ./configure --prefix=/usr/local/pg12 --with-pgport=1921
$ gmake world
$ gmake install-world

2.2 切換使用者設定環境變數

$ su - postgres
[postgres@pg1 ~]$ vim .bash_profile
export PGDATA=/pgdata/12/data
export LANG=en_US.utf8
export PGHOME=/usr/local/pg12
export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH
export DATE=`date +%Y%m%d%H%M`
export PATH=$PGHOME/bin:$PATH
export MANPATH=$PGHOME/share/man:$MANPATH
export PGUSER=postgres

[postgres@pg1 ~]$ source .bash_profile
[postgres@pg1 ~]$ psql --version
psql (PostgreSQL) 12.6

2.3 初始化資料

[postgres@pg1 ~]$ initdb -D /pgdata/12/data -W
# 簡易初始化
[postgres@pg1 ~]$ initdb -A md5 -D $PGDATA -E utf8 --locale=C -W
# 生產建議

[postgres@pg1 ~]$ pg_ctl start   # 啟動postgresql

[postgres@pg1 ~]$ psql           # 使用本地socket連線到postgresql
Password for user postgres: 
psql (12.6)

postgres=# create database lvzhenjiang;
# 建立lvzhenjiang資料庫
postgres=# \c lvzhenjiang;
# 切換到lvzhenjiang資料庫
lvzhenjiang=# create table t1 (id int);
# 建立t1表
lvzhenjiang=# insert into t1 values(1);
# 向t1表中插入資料
lvzhenjiang=# select * from t1;
# 檢視t1表中的資料
 id 
----
  1
(1 row)
lvzhenjiang=# \l    # 檢視所有的資料庫
                              List of databases
    Name     |  Owner   | Encoding | Collate | Ctype |   Access privileges   
-------------+----------+----------+---------+-------+-----------------------
 lvzhenjiang | postgres | UTF8     | C       | C     | 
 postgres    | postgres | UTF8     | C       | C     | 
 template0   | postgres | UTF8     | C       | C     | =c/postgres          +
             |          |          |         |       | postgres=CTc/postgres
 template1   | postgres | UTF8     | C       | C     | =c/postgres          +
             |          |          |         |       | postgres=CTc/postgres
(4 rows)

lvzhenjiang=# \d    # 檢視lvzhenjiang庫中的表
        List of relations
 Schema | Name | Type  |  Owner   
--------+------+-------+----------
 public | t1   | table | postgres
(1 row)

lvzhenjiang=# \dt   # 檢視lvzhenjiang庫中的表
        List of relations
 Schema | Name | Type  |  Owner   
--------+------+-------+----------
 public | t1   | table | postgres
(1 row)

三、啟動關閉

3.1 手動方式

[postgres@pg1 ~]$ pg_ctl -D /pgdata/12/data -l logfile start
[postgres@pg1 ~]$ pg_ctl -D /pgdata/12/data stop -ms
[postgres@pg1 ~]$ pg_ctl -D /pgdata/12/data stop -mf   # 常用關閉方式
[postgres@pg1 ~]$ pg_ctl -D /pgdata/12/data stop -mi
[postgres@pg1 ~]$ pg_ctl restart -mf

3.2 配置為系統服務

注: 若想新增為系統服務,使用systemctl指令來控制服務的啟停,可以參考官方文件

四、基礎管理

4.1 連線管理

預設安裝完成後 只能允許本地socket連線!

[postgres@pg1 ~]$ psql  
# 本地socket連線方式
4.1.1 修改配置檔案,便於遠端登陸
[postgres@pg1 ~]$ vim $PGDATA/pg_hba.conf
host    all             all             192.168.99.0/24         md5
[postgres@pg1 ~]$ cp $PGDATA/postgresql.conf{,.bak}
[postgres@pg1 ~]$ vim $PGDATA/postgresql.conf
listen_addresses = '*'   # *表示監聽所有地址
port = 5432      # 監聽埠
max_connections = 1000    # 指定最大連線數
tcp_keepalives_idle = 60
tcp_keepalives_interval = 10
tcp_keepalives_count = 10
shared_buffers = 1GB   # 設定共享記憶體緩衝區的記憶體量,建議值為系統總記憶體的25%
temp_buffers = 80MB    # 設定用於每個資料庫會話中的臨時緩衝區的最大記憶體量
max_files_per_process = 65535   # 設定允許每個伺服器子程序同時開啟的檔案的最大數量。不能大於ulimt -n的數值
bgwriter_delay = 100ms 
bgwriter_lru_maxpages = 1000
bgwriter_flush_after = 0
synchronous_commit = off
wal_level = replica
archive_mode = on
# 以下路徑替換為實際備份路徑
archive_command = 'test ! -f /pgdata/12/data/backup/incre/%f && cp %p /pgdata/12/data/backup/incre/%f'
full_page_writes = on
wal_buffers = -1
wal_writer_delay = 100ms
wal_writer_flush_after = 256kB
checkpoint_timeout = 30min
max_wal_size = 5GB
min_wal_size = 1GB
log_destination = 'stderr'
logging_collector = on
log_directory = 'logs'
log_filename = 'postgresql-%Y-%m-%d_%H.log'
log_file_mode = 0640
log_rotation_age = 1d 
log_rotation_size = 100MB
log_truncate_on_rotation = off
log_min_messages = notice
log_min_error_statement = notice
log_min_duration_statement = 3s
log_checkpoints = on
log_connections = on
log_error_verbosity = verbose
log_line_prefix = '%m '
log_timezone = 'PRC'
track_activities = on
log_autovacuum_min_duration = 3s 
autovacuum_max_workers = 4
autovacuum_naptime = 45s
autovacuum_vacuum_scale_factor = 0.1 
autovacuum_analyze_scale_factor = 0.1
autovacuum_freeze_max_age = 1600000000 
autovacuum_multixact_freeze_max_age = 1600000000
vacuum_freeze_table_age = 1500000000
vacuum_multixact_freeze_table_age = 1500000000
datestyle = 'iso, mdy'
timezone = 'PRC'
lc_messages = 'en_US.utf8'
lc_monetary = 'en_US.utf8'
lc_numeric = 'en_US.utf8'
lc_time = 'en_US.utf8'
default_text_search_config = 'pg_catalog.english'

關於配置檔案的優化,可以參考官方文件

[postgres@pg1 ~]$ pg_ctl restart -mf    # 重啟生效
[postgres@pg1 ~]$ psql -d postgres -h 192.168.99.4 -p 1921 -U postgres
Password for user postgres: 
postgres=#    
# 測試命令列遠端登陸

# 自行下載測試pgadmin連線pg
https://www.pgadmin.org/
# 也可以通過navicat工具進行連線測試

4.2 使用者

4.2.1 使用者作用

用來登陸資料庫例項、管理資料庫物件!

4.2.2 使用者的定義方式
create user  # 預設自帶連線功能(常用)
create role
例子:
CREATE USER test1 WITH PASSWORD 'test1';
CREATE ROLE test2 WITH LOGIN PASSWORD 'test2' VALID UNTIL '2021-06-30';
CREATE USER admin WITH SUPERUSER PASSWORD 'admin';
CREATE USER repl RELICATION LOGIN ENCRYPTED PASSWORD 'repl';
DROP USER test1;
# 刪除使用者
ALTER USER admin with PASSWORD 'admin123';
# 更改使用者密碼
ALTER USER admin WITH nologin PASSWORD 'admin123';
# 更改使用者許可權
\help CREATE USER;   # 檢視幫助
\du   # 檢視所有的使用者

4.3 許可權管理

4.3.1 許可權級別
  • cluster許可權:例項許可權通過pg_hba.conf配置;
  • database許可權:資料庫許可權通過grant和revoke操作schema配置;
  • TBS許可權:表空間許可權通過grant和revoke操作表、物化檢視、索引、臨時表配置;
  • schema許可權:模式許可權通過grant和revoke操作模式下的物件配置;
  • object許可權:物件許可權通過grant和revoke配置;
4.3.2 許可權定義
  • database許可權設定
GRANT create ON DATABASE lvzhenjiang TO lvzhenjiang;
  • schema許可權
ALTER SCHEMA abc OWNER to abc;
GRANT select,insert,update,delete ON ALL TABLES IN SCHEMA abc to abc;
  • object許可權
GRANT select,insert,update,delete ON a.b TO u;
  • 案例:建立業務使用者
postgres=# create database taobao;
postgres=# \c taobao;
taobao=# create SCHEMA miaosha;
taobao=# create user miaosha with password '123';
taobao=# ALTER SCHEMA miaosha OWNER to miaosha;
taobao=# GRANT select,insert,update,delete ON ALL TABLES IN SCHEMA miaosha to miaosha;

5、常用命令

\?
\l
\d
\du
\d t1
\c lvzhenjiang
\help
\help create user
\du
\x
*************** 當你發現自己的才華撐不起野心時,就請安靜下來學習吧!***************