暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

Linux环境下PG 14的安装部署

DB宝 2022-05-23
2406

安装 PostgreSQL 14

常用方法

下载PG

https://www.postgresql.org/

https://yum.postgresql.org/rpmchart.php

https://yum.postgresql.org/14/redhat/rhel-7-x86_64/repoview/postgresqldbserver14.group.html

https://www.postgresql.org/ftp/source/

打开 PostgreSQL 官网 https://www.postgresql.org/,点击菜单栏上的 Download ,可以看到这里包含了很多平台的安装包,包括 Linux、Windows、Mac OS等 ;也可以直接访问:https://www.postgresql.org/download/ 进行下载。

yum在线安装

https://www.postgresql.org/download

https://yum.postgresql.org/repopackages.php

文档:https://www.postgresql.org/download/linux/redhat/

rpm下载:https://yum.postgresql.org/rpmchart/

  1docker rm -f lhrpgccc
2docker run -d --name lhrpgccc -h lhrpgccc \
3  -p 25432-25439:5432-5439 \
4  -v /sys/fs/cgroup:/sys/fs/cgroup \
5  --privileged=true lhrbest/lhrcentos76:8.8 \
6  /usr/sbin/init
7
8docker exec -it lhrpgccc bash
9
10
11-- 一些依赖包
12yum install -y cmake make gcc zlib zlib-devel gcc-c++ perl readline readline-devel  \
13python36 tcl openssl ncurses-devel openldap pam flex
14
15
16-- 删除已存在的PG
17yum remove -y postgresql* && rm -rf  /var/lib/pgsql && rm -rf  /usr/pgsql* && userdel -r postgres && groupdel postgres
18yum install -y sysbench
19
20
21-- 安装yum源
22yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
23# yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-6-x86_64/pgdg-redhat-repo-latest.noarch.rpm
24
25yum repolist all | grep pgdg
26yum repolist enabled | grep pgdg
27
28-- 安装pg,注意:postgresql14-contrib是安装插件的
29yum install -y postgresql14 postgresql14-server postgresql14-libs postgresql14-contrib  
30
31
32-- 验证
33[root@lhrpgccc /]# rpm -aq| grep postgres
34postgresql14-14.2-1PGDG.rhel7.x86_64
35postgresql14-contrib-14.2-1PGDG.rhel7.x86_64
36postgresql14-libs-14.2-1PGDG.rhel7.x86_64
37postgresql14-server-14.2-1PGDG.rhel7.x86_64
38
39
40-- 环境变量
41echo "export PATH=/usr/pgsql-14/bin:$PATH" >> /etc/profile
42
43
44-- 初始化PG
45/usr/pgsql-14/bin/postgresql-14-setup initdb
46systemctl enable postgresql-14
47systemctl start postgresql-14
48systemctl status postgresql-14
49
50-- 本地登陆
51su - postgres
52psql
53
54-- 安装插件
55create extension pageinspect;
56create extension pg_stat_statements;
57
58select * from pg_extension ;
59select * from pg_available_extensions order by name;
60
61-- 修改postgres密码
62alter user postgres with encrypted password 'lhr'; 或 \password
63select * from pg_tables limit 10;
64select version();
65
66
67firewall-cmd --add-port=5432/tcp --permanent
68firewall-cmd --reload
69firewall-cmd --list-port
70
71
72
73-- 配置允许PG远程登录,注意版本:
74cat >> /var/lib/pgsql/14/data/postgresql.conf <<"EOF"
75listen_addresses = '*'
76port=5432
77unix_socket_directories='/var/lib/pgsql/14/data'
78logging_collector = on
79log_directory = 'pg_log'
80log_filename = 'postgresql-%a.log'
81log_truncate_on_rotation = on
82EOF
83
84cat  > /var/lib/pgsql/14/data/pg_hba.conf << EOF
85# TYPE  DATABASE    USER    ADDRESS       METHOD
86host      all       all    0.0.0.0/0      trust
87EOF
88
89systemctl restart postgresql-14
90
91
92-- 远程登陆
93psql -U postgres -h 192.168.66.35 -d postgres -p25432
94
95
96
97-- 从Postgresql 9.2开始,还可以使用URI格式进行连接:psql postgresql://myuser:mypasswd@myhost:5432/mydb
98psql postgresql://postgres:lhr@192.168.66.35:25432/postgres
99
100
101\l
102CREATE DATABASE lhrdb WITH OWNER=postgres ENCODING='UTF-8';
103\c lhrdb
104
105create table student (
106  id integer not null,
107  name character(32),
108  number char(5),
109  constraint student_pkey primary key (id)
110);
111
112\d student
113
114INSERT INTO student (idnamenumberVALUES (1'张三''1023'); 
115SELECT * FROM student WHERE id=1;

其中-h参数指定服务器地址,默认为127.0.0.1,默认不指定即可,-d指定连接之后选中的数据库,默认也是postgres,-U指定用户,默认是当前用户,-p 指定端口号,默认是"5432",其它更多的参数选项可以执行:./bin/psql --help 查看

docker安装

Docker Hub的官网地址:https://hub.docker.com/_/postgres

GitHub的地址:https://github.com/docker-library/postgres

 1-- 拉取所有镜像
2docker pull postgres:9.4.26 
3docker pull postgres:9.6.24
4docker pull postgres:10.20
5docker pull postgres:11.15
6docker pull postgres:12.10
7docker pull postgres:13.6
8docker pull postgres:14.2
9
10
11
12-- 创建各个版本的Docker容器
13docker rm -f lhrpg94 lhrpg96 lhrpg10 lhrpg11 lhrpg12 lhrpg13 lhrpg14
14docker run --name lhrpg94 -h lhrpg94 -d -p 54321:5432 -e POSTGRES_PASSWORD=lhr -e TZ=Asia/Shanghai postgres:9.4.26
15docker run --name lhrpg96 -h lhrpg96 -d -p 54322:5432 -e POSTGRES_PASSWORD=lhr -e TZ=Asia/Shanghai postgres:9.6.24
16docker run --name lhrpg10 -h lhrpg10 -d -p 54323:5432 -e POSTGRES_PASSWORD=lhr -e TZ=Asia/Shanghai postgres:10.20
17docker run --name lhrpg11 -h lhrpg11 -d -p 54324:5432 -e POSTGRES_PASSWORD=lhr -e TZ=Asia/Shanghai postgres:11.15
18docker run --name lhrpg12 -h lhrpg12 -d -p 54325:5432 -e POSTGRES_PASSWORD=lhr -e TZ=Asia/Shanghai postgres:12.10
19docker run --name lhrpg13 -h lhrpg13 -d -p 54326:5432 -e POSTGRES_PASSWORD=lhr -e TZ=Asia/Shanghai postgres:13.6
20docker run --name lhrpg14 -h lhrpg14 -d -p 54327:5432 -e POSTGRES_PASSWORD=lhr -e TZ=Asia/Shanghai postgres:14.2
21
22
23
24docker exec -it lhrpg14 psql -U postgres -d postgres
25
26select * from pg_tables ;
27select version();
28
29psql -U postgres -h 172.17.0.12 -d postgres
30psql -U postgres -h 192.168.66.35 -p 54324 -d postgres

二进制安装

https://www.enterprisedb.com/download-postgresql-binaries

从11开始,不再支持Linux版本的二进制,但是Windows依然支持。

解压,并且配置环境变量即可使用:

1cat >> /root/.bashrc <<"EOF"
2
3export LD_LIBRARY_PATH=/usr/local/pgsql/lib:$LD_LIBRARY_PATH
4export PATH=$PATH:/usr/local/pgsql/bin
5
6EOF

注意:psql和gsql的lib库不兼容,参考:https://www.xmmup.com/guzhangchulipsqlkehuduanlianjiepgbaocuopsql-error-expected-authentication-request-from-serv.html

源码安装(生产库建议源码安装)

https://www.postgresql.org/ftp/source/

http://postgres.cn/docs/13/install-procedure.html

以下方法已在9.6到14版本测试过:

  1-- 下载源码包
2wget https://ftp.postgresql.org/pub/source/v14.2/postgresql-14.2.tar.gz --no-check-certificate
3wget https://ftp.postgresql.org/pub/source/v13.3/postgresql-13.3.tar.gz
4wget https://ftp.postgresql.org/pub/source/v12.7/postgresql-12.7.tar.gz
5wget https://ftp.postgresql.org/pub/source/v11.12/postgresql-11.12.tar.gz
6wget https://ftp.postgresql.org/pub/source/v10.17/postgresql-10.17.tar.gz
7wget https://ftp.postgresql.org/pub/source/v9.6.22/postgresql-9.6.22.tar.gz
8wget https://ftp.postgresql.org/pub/source/v9.4.26/postgresql-9.4.26.tar.gz
9
10
11-- 一些依赖包
12yum install -y cmake make gcc zlib zlib-devel gcc-c++ perl readline readline-devel  \
13python36 tcl openssl ncurses-devel openldap pam flex
14
15
16-- 创建用户
17useradd pgsql
18echo "lhr" | passwd --stdin pgsql
19
20
21-- 创建目录
22mkdir -p /postgresql/{pgdata,archive,scripts,backup,pg14,soft}
23chown -R pgsql:pgsql /postgresql
24chmod -R 775 /postgresql
25
26-- 编译
27su - pgsql
28cd /postgresql/soft
29tar zxvf postgresql-14.2.tar.gz
30cd postgresql-14.2
31./configure --prefix=/postgresql/pg14
32make -j 16 && make install
33# 编译完成,最后一行显示:All of PostgreSQL successfully made. Ready to install.
34
35-- 如果你希望编译所有能编译的东西,包括文档(HTML和手册页)以及附加模块(contrib),这样键入:
36make world -j 16 && make install-world 
37#最后一行显示:PostgreSQL, contrib, and documentation successfully made. Ready to install.
38-- 源码安装postgresql时,而make时又没有make world,就会导致的pg最终没有类似pg_stat_statements的扩展功能
39
40
41-- 配置环境变量
42cat >>  ~/.bash_profile <<"EOF"
43export PGPORT=5432
44export PGDATA=/postgresql/pgdata
45export PGHOME=/postgresql/pg14
46export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
47export PATH=$PGHOME/bin:$PATH:.
48export PGHOST=$PGDATA
49export PGUSER=postgres
50export PGDATABASE=postgres
51EOF
52
53source  ~/.bash_profile
54
55-- 初始化
56su - pgsql
57/postgresql/pg14/bin/initdb -D /postgresql/pgdata -E UTF8 --locale=en_US.utf8 -U postgres
58
59
60-- 修改参数
61cat >> /postgresql/pgdata/postgresql.conf <<"EOF"
62listen_addresses = '*'
63port=5432
64unix_socket_directories='/postgresql/pgdata'
65logging_collector = on
66log_directory = 'pg_log'
67log_filename = 'postgresql-%a.log'
68log_truncate_on_rotation = on
69EOF
70
71
72
73cat   > /postgresql/pgdata/pg_hba.conf << EOF
74# TYPE  DATABASE    USER    ADDRESS       METHOD
75host      all       all    0.0.0.0/0        md5
76EOF
77
78
79
80-- 启动
81su - pgsql
82pg_ctl start
83pg_ctl status
84pg_ctl stop
85
86
87
88-- 配置系统服务
89cat > /etc/systemd/system/PG14.service <<"EOF"
90[Unit]
91Description=PostgreSQL database server
92Documentation=man:postgres(1)
93After=network.target
94
95[Service]
96Type=forking
97User=pgsql
98Group=pgsql
99Environment=PGPORT=5433
100Environment=PGDATA=/postgresql/pgdata
101OOMScoreAdjust=-1000
102ExecStart=/postgresql/pg14/bin/pg_ctl start -D ${PGDATA} -s -o "-p ${PGPORT}" -w -t 300
103ExecStop=/postgresql/pg14/bin/pg_ctl stop -D ${PGDATA} -s -m fast
104ExecReload=/postgresql/pg14/bin/pg_ctl reload -D ${PGDATA} -s
105KillMode=mixed
106KillSignal=SIGINT
107TimeoutSec=0
108
109[Install]
110WantedBy=multi-user.target
111EOF
112
113systemctl daemon-reload
114systemctl enable PG14
115systemctl start PG14
116systemctl status PG14
117
118
119su - pgsql
120psql
121\password postgres
122or:
123alter user postgres with password 'lhr';
124
125
126
127-- 安装插件
128create extension pageinspect;
129create extension pg_stat_statements;
130
131select * from pg_extension ;
132select * from pg_available_extensions order by name;

编译参数介绍:

--with-pgport=NUMBER
把NUMBER设置为服务器和客户端的默认端口。默认是 5432。这个端口可以在以后修改,不过如果你在这里声明,那么服务器和客户端将有相同的编译好了的默认值。这样会非常方便些。通常选取一个非默认值的理由是你企图在同一台机器上运行多个PostgreSQL服务器。

--with-openssl
编译SSL(加密)连接支持。这个选项需要安装OpenSSL包。configure将会检查所需的头文件和库以确保你的 OpenSSL安装足以让配置继续下去。

--with-perl
制作PL/Perl服务器端编程语言。

--with-python
制作PL/Python服务器端编程语言。

--with-blocksize=BLOCKSIZE
设置块尺寸,以 K 字节计。这是表内存储和I/O的单位。默认值(8K字节)适合于大多数情况,但是在特殊情况下可能其他值更有用。这个值必须是2的幂并且在 1 和 32 (K字节)之间。注意修改这个值需要一次 initdb。

--with-systemd
系统服务方式管理

更多编译选项请参考:http://postgres.cn/docs/13/install-procedure.html

配置环境变量

 1echo "export PATH=/usr/pgsql-14/bin:$PATH" >> /etc/profile
2
3
4mkdir -p /home/postgres
5chown postgres.postgres /home/postgres -R
6sed -i 's|/var/lib/pgsql|/home/postgres|' /etc/passwd
7echo "lhr" |passwd --stdin postgres
8
9cat > /home/postgres/.bash_profile <<"EOF"
10export PGPORT=5432
11export PGHOME=/usr/pgsql-14
12export PGDATA=/var/lib/pgsql/14/data
13export PATH=$PGHOME/bin:$PATH
14export MANPATH=$PGHOME/share/man:$MANPATH
15export LANG=en_US.UTF-8
16export DATE='date +"%Y%m%d%H%M"'
17export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
18export PGHOST=$PGDATA
19export PGUSER=postgres
20export PGPASSWORD=lhr
21export PGDATABASE=postgres
22export PS1="[\u@\h \W]\$ "
23
24EOF
25
26
27chown postgres.postgres /home/postgres/.bash_profile

环境变量说明
PGHOST要联接的主机名主机名以斜杠开头。
PGHOSTADDR与之连接的主机的IP地址。
PGPORT主机服务器的端口号,或者在 Unix 域套接字联接时的套接字扩展文件名。
PGDATABASE数据库名
PGUSER要连接的PostgreSQL用户名。缺省是与运行该应用的用户操作系统名同名的用户。
PGPASSWORD如果服务器要求口令认证,所用的口令。
PGPASSFILE指定密码文件的名称用于查找。如果没有设置, 默认为~/.pgpass
PGSERVICE用于额外参数的服务名。
PGSERVICEFILE指定连接服务的文件中每个用户的名字, 如果没有设置默认~/.pg_service.conf
PGREALM设置与PostgreSQL一起使用的 Kerberos 域, 如果该域与本地域不同的话。
PGOPTIONS添加命令行选项以在运行时发送到服务器。
PGAPPNAME为application_name配置参数指定一个值。
PGSSLMODE这个选项决定是否需要和服务器协商一个SSL TCP/IP连接。
PGREQUIRESSL废弃
PGSSLCOMPRESSIONSSL连接进行的数据是否压缩。
PGSSLCERT这个参数指定客户端SSL认证的文件名。
PGSSLKEY这个参数指定客户端使用的秘钥的位置。
PGSSLROOTCERT这个参数声明一个包含SSL认证授权(CA)证书的文件名。
PGSSLCRL这个参数声明SSL证书撤销列表(CRL)的文件名。
PGREQUIREPEER这个参数声明服务器的操作系统用户名。
PGKRBSRVNAME使用GSSAPI认证时使用的Kerberos服务名。
PGGSSLIB为GSSAPI认证使用的GSS库。只在Windows上使用。
PGCONNECT_TIMEOUT连接的最大等待时间,以秒计(用十进制整数字串书写)。
PGCLIENTENCODING为这个连接设置client_encoding配置参数。
PGDATESTYLE设置缺省的时区。(等效于SET timezone TO …。)
PGTZ设置缺省的时区。(等效于SET timezone TO …。)
(libpq)PGSYSCONFDIR设置包含pg_service.conf文件。
(libpq)PGLOCALEDIR设置包含信息国际化的locale文件目录。

系统参数修改

 1systemctl status firewalld.service
2systemctl stop firewalld.service
3systemctl disable firewalld.service
4
5setenforce 0
6sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
7
8
9cat > /etc/sysctl.conf <<"EOF"
10vm.swappiness=10
11vm.zone_reclaim_mode=0
12fs.aio-max-nr = 1048576
13fs.file-max = 6815744
14net.ipv4.ip_local_port_range = 9000 65500
15net.core.rmem_default = 262144
16net.core.rmem_max = 4194304
17net.core.wmem_default = 262144
18net.core.wmem_max = 1048586
19kernel.shmmax = 1288490188
20kernel.shmall = 314572
21kernel.shmmni = 4096
22kernel.sem = 50100 64128000 50100 1280
23EOF
24
25sysctl -p
26
27
28cat >> /etc/security/limits.conf <<"EOF" 
29* soft nofile 131072
30* hard nofile 131072
31* soft nproc 131072
32* hard nproc 131072
33* soft core unlimited
34* hard core unlimited
35* soft memlock 50000000
36* hard memlock 50000000
37EOF
38
39
40
41echo "* - nproc unlimited" > /etc/security/limits.d/90-nproc.conf
42echo "session required pam_limits.so" >> /etc/pam.d/login
43
44
45
46# 关闭THP
47root用户下
48在vi /etc/rc.local最后添加如下代码
49if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
50echo never > /sys/kernel/mm/transparent_hugepage/enabled
51fi
52if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
53echo never > /sys/kernel/mm/transparent_hugepage/defrag
54fi
55
56chmod +x /etc/rc.d/rc.local
57echo never > /sys/kernel/mm/transparent_hugepage/enabled
58echo never > /sys/kernel/mm/transparent_hugepage/defrag
59
60cat /sys/kernel/mm/transparent_hugepage/enabled
61cat /sys/kernel/mm/transparent_hugepage/defrag


文章转载自DB宝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论