安装postgresql11.5

时间:2021-10-13 16:40:33

 

root身份安装

创建用户

编译安装成功后,接下来要做的就是创建一个普通用户,因为默认超级用户(root)不能启动postgresql,所以需要创建一个普通用户来启动数据库,执行以下命令创建用户:

[[email protected] build_dir]# groupadd postgres
[[email protected] build_dir]# useradd -g postgres postgres
[[email protected] build_dir]# passwd postgres

接下来设置权限,将pg的数据目录全部赋给postgres用户,执行以下命令:

[[email protected] build_dir]# chown -R postgres:postgres /usr/local/pgsql

创建目录

[[email protected] build_dir]# mkdir -p /mnt/db1/pgdata/pgsql /mnt/db1/pgdata/pgtbs /mnt/db1/archivelog /backups
[[email protected] build_dir]# chmod -R 775 /mnt/db1
[[email protected] build_dir]# chown -R postgres:postgres /mnt/db1

设置环境变量

[[email protected] 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

执行如下命令使其生效:

[[email protected] build_dir]# source /home/postgres/.bash_profile

 

 

 

 

 

 

准备

yum install -y 
gcc gcc-c    
openssl openssl-devel
readline readline-devel 
zlib zlib-devel 
llvm5.0 llvm5.0-devel 
libxml2-devel 
libxslt-devel 
libicu-devel 

python-devel
tcl-devel 
systemd-devel 
openldap-devel 
pam-devel 

clang 
perl-ExtUtils-Embed 
epel-release 


 

 

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 指定默认安装路径
[[email protected] 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
make install

 

 

 

 

初始化数据库

切换用户
[[email protected] build_dir]# su - postgres
初始化数据库
[[email protected] ~]$ initdb -D $PGDATA -U postgres --locale=en_US.UTF8 -E UTF8

    修改监听地址 将listen_addresses的值设置成*,使其监听整个网络,端口号默认是5432,也可以自己设置。

[[email protected] ~]$ vim /mnt/db1/pgdata/pgsql/postgresql.conf
修改内容:
listen_addresses = *
unix_socket_directories = .
port = 8432

    修改客户端认证方式

[[email protected] ~]$ vim /mnt/db1/pgdata/pgsql/pg_hba.conf
添加内容:
host all all 0.0.0.0/0 md5 # 其他用户登陆

设置防火墙规则

#切换回root用户
[[email protected] ~]$ exit
[[email protected] build_dir]# firewall-cmd --zone=public --add-port=8432/tcp --permanent
[[email protected] build_dir]# firewall-cmd --reload

启动数据库

[[email protected] build_dir]# su - postgres
启动
[[email protected] ~]$ pg_ctl -D /mnt/db1/pgdata/pgsql -l /mnt/db1/archivelog/pgsql.log start
停止
[[email protected] postgres]# pg_ctl -D /mnt/db1/pgdata/pgsql/ -s -m fast stop

连接测试

[[email protected] ~]$ 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 用户名
    [[email protected] ~]$ psql -h localhost -p 8432 -U postgres

设置postgres用户密码

[[email protected] ~]$ psql
postgres=# ALTER USER postgres WITH encrypted PASSWORD new password;
postgres=# q
[[email protected] ~]$ 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

    添加可执行权限

[[email protected] postgres]# chmod 754 /usr/lib/systemd/system/postgresql-11.service

    设置开机自启动

自动启动
[[email protected] postgres]# systemctl enable postgresql-11.service
启动
[[email protected] postgres]# systemctl start postgresql-11.service
停止某服务
[[email protected] postgres]# systemctl stop postgresql-11.service
不自动启动
[[email protected] postgres]# systemctl disable postgresql-11.service
检查服务状态(服务详细信息)
systemctl status postgresql-11.service
检查服务状态(仅显示是否Active)
systemctl is-active postgresql-11.service
显示所有已启动的服务
systemctl list-units --type=service