官方安装文档:https://www.postgresql.org/docs/12/installation.html
一、环境
CentOS7.6Postgresql12.2
二、操作系统环境配置
参考前面yum 安装方式文章 :
三、编译依赖包
可选软件包 :
1. 为了编译PL/Perl服务器端编程语言,需要完整Perl的安装,包括libperl库和头文件。
2. 为了编译PL/Python服务器端语言,需要一个包含头文件和distuils模块的Python安装。
3. 为了编译PL/Tcl服务器端语言,需要Tcl的安装。
4. 为了使用NSL,即具有使用不同于英语的一种语言显示消息的能力,需要一种Gettext API的实现。
5. 需要Kerberos, OpenSSL, OpenLDAP, and/or PAM,如果你想要使用这些服务支持认证或加密。
6. 为了编译PostgreSQL的文档,有一组独立的要求。
yum install systemtap systemtap-sdt-devel
yum install perl-ExtUtils-Embed
yum install readline readline-devel
yum install zlib zlib-devel
yum install openssl openssl-devel
yum install pam pam-devel
yum install libxml2 libxml2-devel
yum install libxslt libxslt-devel
yum install tcl tcl-devel
yum install openldap openldap-develyum install gcc-c++
yum install python python-devel
yum install python3 python3-devel
yum install gcc-c++
四、源代码下载
本文安装所使用的版本是12.2官方下载页面:可以使用下面命令直接wget
wget https://ftp.postgresql.org/pub/source/v12.2/postgresql-12.2.tar.gz
五、编译安装步骤
5.1 官方简要步骤,可用于测试环境
tar xvf postgresql-12.2.tar.gz
cd postgresql-12.2
./configure PREFIX=/usr/local/pgsql-12 #配置,生成makefile文件并指定安装目录
make && make install #make && make install
su - root #切换到root用户
useradd postgres #添加一个用户,添加完用户以后需要通过passwd postgres来修改该用户的密码
mkdir /usr/local/pgsql-12/data #新建一个目录,以后数据库的所有数据和操作都在该目录下
chown postgres.postgres /usr/local/pgsql-12/data #更改目录的所有者为 postgres
su - postgres #切换用户为postgres
/usr/local/pgsql-12/bin/initdb -D /usr/local/pgsql-12/data #初始化工作区
/usr/local/pgsql-12/bin/pg_ctl -D /usr/local/pgsql-12/data logfile start
/usr/local/pgsql-12/bin/createdb test #新建一个名为test 的数据库
/usr/local/pgsql-12/bin/psql test #打开客户端,连接到数据库服务器端
5.1 详细定制安装步骤
5.1.1 配置
/configure --prefix=/usr/local/pgsql-12 --with-pgport=5432 --with-perl --with-python PYTHON='/usr/bin/python3' --with-tcl --with-openssl --with-pam --without-ldap --with-libxml --with-libxslt --enable-thread-safety --with-wal-blocksize=16 --enable-dtrace --enable-debug
· 配置参数说明:下面参数依赖前面安装的依赖包,如果没有安装对应的依赖包会报错,感兴趣的同学可以不安装依赖包,然后找出每个选项对应的依赖包是什么。
参考:https://www.yuque.com/samyang-pey79/pschpn/postgresql-an-zhuang-bian-yi-fang-shi?inner=e16ca2fc
5.1.2 编译
Configure成功之后,执行编译:
make world
make world安装包含了文档,以及contrib下面的所有扩展
· contrib下面的扩展简介
参考:https://www.yuque.com/samyang-pey79/pschpn/postgresql-an-zhuang-bian-yi-fang-shi?inner=ba4e20bf
5.1.4 安装
带world参数可以安装PG的附属信息,如文档,帮助等
make install-world
六、安装后配置
6.1 添加操作系统用户
useradd postgres
6.2 环境变量配置
su - postgres
cat >>~/.pgsql_profile <<EOF
export PGHOME=/usr/local/pgsql-12
export PGDATA=/data/pgsql/12/data
export PATH=$PGHOME/bin:$PATH
export MANPATH=$PGHOME/share/man:$MANPATH
export LANG=en_US.utf8
export DATE=`date +"%Y-%m-%d %H:%M:%S"`
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
alias rm='rm -i'
alias ll='ls -lh'
export PGPORT=5432
export PGUSER=postgres
EOF
cat >>~/.bash_profile <<EOF
[ -f ~/.pgsql_profile ] && source ~/.pgsql_profile
EOF
6.3 自启动配置
CentOS7 将/etc/rc.d/rc.local的级别降低了 ,默认是启动不了一些服务的。通过ls -l 可以看到该文件没有执行权限。查看该文件内容,在英文注释部分已经有提示了。
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
可以按照提示给该文件添加执行权限,延续老的方式进行开机启动。
· 本文将按照新的方式,将postgresql 添加到系统服务里面开机启动,下面是启动脚本和添加方式。
# 配置启动脚本
cat >> /usr/lib/systemd/system/postgresql-12.service<<EOF
# It's nngkt recommended to modify this file in-place, because it will be
# overwritten during package upgrades. If you want to customize, the
# best way is to create a file "/etc/systemd/system/postgresql-12.service",
# containing
# .include /usr/lib/systemd/system/postgresql-12.service
# ...make your changes here...
# For more info about custom unit files, see
# http://fedoraproject.org/wiki/Systemd#How_do_I_customize_a_unit_file.2F_add_a_custom_unit_file.3F
# Note: changing PGDATA will typically require adjusting SELinux
# configuration as well.
# Note: do not use a PGDATA pathname containing spaces, or you will
# break postgresql-setup.
[Unit]
Description=PostgreSQL 12 database server
Documentation=https://www.postgresql.org/docs/12/static/
After=syslog.target
After=network.target
[Service]
Type=forking
User=postgres
Group=postgres
# Note: avoid inserting whitespace in these Environment= lines, or you may
# break postgresql-setup.
# Location of database directory
Environment=PGDATA=/data/pgsql/12/data/
# 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
ExecStart=/usr/local/pgsql-12/bin/pg_ctl start -D ${PGDATA} -s
ExecStop=/usr/local/pgsql-12/bin/pg_ctl stop -D ${PGDATA} -s -m fast
ExecReload=/usr/local/pgsql-12/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
EOF
# 设置权限
chmod 754 /usr/lib/systemd/system/postgresql.service
# 设置开机启动
systemctl enable postgresql-12.service
# 启动、关闭、重启、查看状态
systemctl start|stop|restart|status postgresql-12.service
# 查看已设置自启动服务
systemctl list-units --type=service
6.4 数据库初始化
#创建目录并授权
mkdir -p /data/pgsql/12/data
chown -R postgres:postgres /data/pgsql
#初始化数据目录(添加 -k 选项,启用checksum)
/usr/local/pgsql-12/bin/initdb -D /data/pgsql/12/data -k
6.5 数据库启动关闭
# 启动
/usr/local/pgsql-12/bin/pg_ctl -D $PGDATA start
# 关闭
/usr/local/pgsql-12/bin/pg_ctl -D $PGDATA stop
# 重新加载配置文件
/usr/local/pgsql-12/bin/pg_ctl reload
6.6 创建数据库和用户
create user test with password 'test';
create database test owner test;
6.7 数据库连接
6.7.1 在postgres用户下直接psql 登录
默认在pg_hba.conf里面本机登录权限设置为trust ,是不需要输入密码的,如果是md5的验证方式则需要密码。详细可参考
如果在用户家目录下有 .pgpass 则不需要输入密码,直接psql -U用户名 就可以登录数据库。.pgpass需要 0600的权限:
cat >>~/.pgpass <<EOF
#hostname:port:database:username:password
localhost:5432:postgres:postgres:postgres
EOF
chmod 0600 ~/.pgpass
6.7.2 使用psql 远程登录
请使用 pgsql --help 查看使用帮助链接例子:
psql -h 192.168.1.10 -p 5432 -Upostgres -D postgres
6.7.3 使用编程语言链接
postgresql 相关的一些软件或者驱动 可参考[官方资料库] ()
6.7.3.1 JAVA
[java jdbc驱动] ()连接字符串:
`jdbc:postgresql://192.168.1.10:5432/test?currentSchema=test`
6.7.3.2 python
· 安装依赖包
pip install psycopg2-binary
· 简要操作案例
· #导入依赖包
· #!/usr/bin/python3
·
· import psycopg2
·
· #创建连接对象
· conn=psycopg2.connect(database="postgres",user="postgres",password="123456",host="localhost",port="5432")
· cur=conn.cursor() #创建指针对象
·
· # 创建表
· cur.execute("CREATE TABLE tb_user (id integer,name varchar,sex varchar);")
·
· #插入数据
· cur.execute("INSERT INTO tb_user(id,name,sex)VALUES(%s,%s,%s)",(1,'Air','M'))
· cur.execute("INSERT INTO tb_user(id,name,sex)VALUES(%s,%s,%s)",(2,'Tal','F'))
· cur.execute("INSERT INTO tb_user(id,name,sex)VALUES(%s,%s,%s)",(3,'Dal','M'))
·
· # 获取结果
· cur.execute('SELECT * FROM tb_user')
· results=cur.fetchall()
· print (results)
·
· # 关闭连接
· conn.commit()
· cur.close()
conn.close()