下載下傳
位址:
https://www.postgresql.org/ftp/source/v11.5/# cd /opt/
# wget https://ftp.postgresql.org/pub/source/v11.5/postgresql-11.5.tar.gz
編譯安裝
- 解壓安裝包,執行./configure --help可以看到編譯相關的資訊。
# tar -zxvf postgresql-11.5.tar.gz
# mkdir -p postgresql-11.5/build_dir
# cd postgresql-11.5
# ll
total 748
-rw-r--r--. 1 1107 1107 522 Aug 5 17:14 aclocal.m4
drwxrwxrwx. 2 1107 1107 4096 Aug 5 17:28 config
-rwxr-xr-x. 1 1107 1107 561752 Aug 5 17:14 configure
-rw-r--r--. 1 1107 1107 84451 Aug 5 17:14 configure.in
drwxrwxrwx. 56 1107 1107 4096 Aug 5 17:28 contrib
-rw-r--r--. 1 1107 1107 1192 Aug 5 17:14 COPYRIGHT
drwxrwxrwx. 3 1107 1107 107 Aug 5 17:28 doc
-rw-r--r--. 1 1107 1107 3848 Aug 5 17:14 GNUmakefile.in
-rw-r--r--. 1 1107 1107 284 Aug 5 17:14 HISTORY
-rw-r--r--. 1 1107 1107 74257 Aug 5 17:29 INSTALL
-rw-r--r--. 1 1107 1107 1665 Aug 5 17:14 Makefile
-rw-r--r--. 1 1107 1107 1212 Aug 5 17:14 README
drwxrwxrwx. 16 1107 1107 4096 Aug 5 17:29 src
# ./configure --help
- 編譯
- 在編譯的過程中會發現缺少包,是以可以提前安裝依賴包
configure: error: readline library not found
If you have readline already installed, see config.log for details on the
failure. It is possible the compiler isn't looking in the proper directory.
Use --without-readline to disable readline support.
configure: error: zlib library not found
If you have zlib already installed, see config.log for details on the
failure. It is possible the compiler isn't looking in the proper directory.
Use --without-zlib to disable zlib support.
- 安裝依賴包
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
- configure
# cd build_dir/
vim ../src/Makefile.global.in
修改以下行:
COMPILE.c.bc = $(CLANG) -Wno-ignored-attributes $(BITCODE_CFLAGS) $(CPPFLAGS) -flto=thin -emit-llvm -c
修改為:
COMPILE.c.bc = $(CLANG) -Wno-ignored-attributes $(BITCODE_CFLAGS) $(CPPFLAGS) -emit-llvm -c
-- --prefix 指定預設安裝路徑
[root@localhost build_dir]# ../configure --prefix=/usr/local/pgsql --enable-nls --with-perl --with-python --with-tcl --with-gssapi --with-llvm LLVM_CONFIG='/usr/lib64/llvm5.0/bin/llvm-config' --with-icu --with-openssl --with-pam --with-ldap --with-systemd --with-libxml --with-libxslt
- configure 指令完成後,會發現建立了 config.status 配置檔案,如下圖:
- make
[root@localhost build_dir]# make
- 出現如下圖就證明編譯成功,可以進行安裝了
- make install
[root@localhost build_dir]# make install
- 出現如下圖就證明安裝成功了。
建立使用者
編譯安裝成功後,接下來要做的就是建立一個普通使用者,因為預設超級使用者(root)不能啟動postgresql,是以需要建立一個普通使用者來啟動資料庫,執行以下指令建立使用者:
[root@localhost build_dir]# groupadd postgres
[root@localhost build_dir]# useradd -g postgres postgres
[root@localhost build_dir]# passwd postgres
接下來設定權限,将pg的資料目錄全部賦給postgres使用者,執行以下指令:
[root@localhost build_dir]# chown -R postgres:postgres /usr/local/pgsql
建立目錄
[root@localhost build_dir]# mkdir -p /mnt/db1/pgdata/pgsql /mnt/db1/pgdata/pgtbs /mnt/db1/archivelog /backups
[root@localhost build_dir]# chmod -R 775 /mnt/db1
[root@localhost build_dir]# chown -R postgres:postgres /mnt/db1
設定環境變量
[root@localhost build_dir]# vi /home/postgres/.bash_profile
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
export PGPORT=8432
export PGHOME=/usr/local/pgsql
export PGDATA=/mnt/db1/pgdata/pgsql
export PATH=$PGHOME/bin:$PATH
export MANPATH=$PGHOME/share/man:$MANPATH
export LANG=en_US.UTF-8
export DATE='date +"%Y%m%d%H%M"'
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
export PGHOST=$PGDATA
export PGUSER=postgres
export PGDATABASE=postgres
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$PGHOME/bin
export PATH
執行如下指令使其生效:
[root@localhost build_dir]# source /home/postgres/.bash_profile
初始化資料庫
切換使用者
[root@localhost build_dir]# su - postgres
初始化資料庫
[postgres@localhost ~]$ initdb -D $PGDATA -U postgres --locale=en_US.UTF8 -E UTF8
- 修改監聽位址 将listen_addresses的值設定成*,使其監聽整個網絡,端口号預設是5432,也可以自己設定。
[postgres@localhost ~]$ vim /mnt/db1/pgdata/pgsql/postgresql.conf
修改内容:
listen_addresses = '*'
unix_socket_directories = '.'
port = 8432
- 修改用戶端認證方式
[postgres@localhost ~]$ vim /mnt/db1/pgdata/pgsql/pg_hba.conf
添加内容:
host all all 0.0.0.0/0 md5 # 其他使用者登陸
設定防火牆規則
#切換回root使用者
[postgres@localhost ~]$ exit
[root@localhost build_dir]# firewall-cmd --zone=public --add-port=8432/tcp --permanent
[root@localhost build_dir]# firewall-cmd --reload
啟動資料庫
[root@localhost build_dir]# su - postgres
啟動
[postgres@localhost ~]$ pg_ctl -D /mnt/db1/pgdata/pgsql -l /mnt/db1/archivelog/pgsql.log start
停止
[root@localhost postgres]# pg_ctl -D /mnt/db1/pgdata/pgsql/ -s -m fast stop
連接配接測試
[postgres@localhost ~]$ psql
查詢所有使用者
postgres=# select * from pg_user;
postgres=# select * from pg_roles;
查詢權限
postgres=# select * from information_schema.table_privileges where grantee='cc';
檢視有哪些資料庫
postgres=# \l
相當與mysql的show databases;
postgres=# select datname from pg_database;
相當于mysql的show tables, public 是預設的schema的名字
postgres=# SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';
相當與mysql的describe table_name, 'table_name'是要查詢的表的名字
postgres=# SELECT column_name FROM information_schema.columns WHERE table_name ='table_name';
退出
postgres=# \q
psql 是 PostgreSQL 的用戶端程式,要連接配接 PostgreSQL 資料庫,我們需要指定以下内容:
- -d or --dbname 資料庫名
- -h or --host 主機名
- -p or --port 端口号,預設5432 端口
-
-U or --username 使用者名
[postgres@localhost ~]$ psql -h localhost -p 8432 -U postgres
設定postgres使用者密碼
[postgres@localhost ~]$ psql
postgres=# ALTER USER postgres WITH encrypted PASSWORD 'new password';
postgres=# \q
[postgres@localhost ~]$ psql -h localhost -p 8432 -U postgres
設定開機自啟動
- 設定啟動配置
vim /usr/lib/systemd/system/postgresql-11.service
添加内容:
[Unit]
Description=PostgreSQL 11 database server
Documentation=https://www.postgresql.org/docs/11/static/
After=syslog.target
After=network.target
[Service]
Type=notify
User=postgres
Group=postgres
# Location of database directory
Environment=PGDATA=/mnt/db1/pgdata/pgsql/
# Where to send early-startup messages from the server (before the logging
# options of postgresql.conf take effect)
# This is normally controlled by the global default set by systemd
# StandardOutput=syslog
# Disable OOM kill on the postmaster
OOMScoreAdjust=-1000
Environment=PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj
Environment=PG_OOM_ADJUST_VALUE=0
# ExecStartPre=/usr/pgsql-11/bin/postgresql-11-check-db-dir ${PGDATA}
ExecStart=/usr/local/pgsql/bin/postmaster -D ${PGDATA}
ExecReload=/bin/kill -HUP $MAINPID
# ExecStart=/usr/local/pgsql9.4/bin/pg_ctl start -D ${PGDATA} -s -o "-p ${PGPORT}" -w -t 300
# ExecStop=/usr/local/pgsql9.4/bin/pg_ctl stop -D ${PGDATA} -s -m fast
# ExecReload=/usr/local/pgsql9.4/bin/pg_ctl reload -D ${PGDATA} -s
KillMode=mixed
KillSignal=SIGINT
# Do not set any timeout value, so that systemd will not kill postmaster
# during crash recovery.
TimeoutSec=0
[Install]
WantedBy=multi-user.target
- 添加可執行權限
[root@localhost postgres]# chmod 754 /usr/lib/systemd/system/postgresql-11.service
自動啟動
[root@localhost postgres]# systemctl enable postgresql-11.service
啟動
[root@localhost postgres]# systemctl start postgresql-11.service
停止某服務
[root@localhost postgres]# systemctl stop postgresql-11.service
不自動啟動
[root@localhost postgres]# systemctl disable postgresql-11.service
檢查服務狀态(服務詳細資訊)
systemctl status postgresql-11.service
檢查服務狀态(僅顯示是否Active)
systemctl is-active postgresql-11.service
顯示所有已啟動的服務
systemctl list-units --type=service
yum 安裝
選擇源:
https://www.postgresql.org/download/linux/redhat/