在docker中快速使用各个版本的PostgreSQL数据库

教育   2024-11-27 20:03   陕西  

1、安装概述

PG安装方法很多,和MySQL类似,给用户提供很大的选择空间。如:RPM包安装(在线、离线)、源码编译安装、系统自带、二进制、NDB安装等。

官网:https://www.postgresql.org/

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

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

源码包:https://www.postgresql.org/ftp/source/

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

2、Docker中快速安装部署各个版本的PG环境

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

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

 1-- 拉取所有镜像
2
3nohup docker pull postgres:9.2 &
4nohup docker pull postgres:9.4.26 &
5nohup docker pull postgres:9.6.24 &
6nohup docker pull postgres:10.23-bullseye &
7nohup docker pull postgres:11.22-bookworm &
8nohup docker pull postgres:12.22 &
9nohup docker pull postgres:13.18 &
10nohup docker pull postgres:14.15 &
11nohup docker pull postgres:15.10 &
12nohup docker pull postgres:16.6 &
13nohup docker pull postgres:17.2 &
14
15docker tag  postgres:11.22-bookworm postgres:11.22
16docker tag  postgres:10.23-bullseye postgres:10.23
17
18
19
20docker rm -f lhrpg92 lhrpg94 lhrpg96 lhrpg10 lhrpg11
21docker rm -f lhrpg12 lhrpg13 lhrpg14 lhrpg15  lhrpg16  lhrpg17
22docker run --name lhrpg92 -h lhrpg92 -d -p 54320:5432 -e POSTGRES_PASSWORD=lhr -e TZ=Asia/Shanghai postgres:9.2
23docker run --name lhrpg94 -h lhrpg94 -d -p 54321:5432 -e POSTGRES_PASSWORD=lhr -e TZ=Asia/Shanghai -e POSTGRES_INITDB_ARGS="--data-checksums" postgres:9.4.26
24docker run --name lhrpg96 -h lhrpg96 -d -p 54322:5432 -e POSTGRES_PASSWORD=lhr -e TZ=Asia/Shanghai -e POSTGRES_INITDB_ARGS="--data-checksums" postgres:9.6.24
25docker run --name lhrpg10 -h lhrpg10 -d -p 54323:5432 -e POSTGRES_PASSWORD=lhr -e TZ=Asia/Shanghai -e POSTGRES_INITDB_ARGS="--data-checksums" postgres:10.23
26docker run --name lhrpg11 -h lhrpg11 -d -p 54324:5432 -e POSTGRES_PASSWORD=lhr -e TZ=Asia/Shanghai -e POSTGRES_INITDB_ARGS="--data-checksums" postgres:11.22
27docker run --name lhrpg12 -h lhrpg12 -d -p 54325:5432 -e POSTGRES_PASSWORD=lhr -e TZ=Asia/Shanghai -e POSTGRES_INITDB_ARGS="--data-checksums" postgres:12.22
28docker run --name lhrpg13 -h lhrpg13 -d -p 54326:5432 -e POSTGRES_PASSWORD=lhr -e TZ=Asia/Shanghai -e POSTGRES_INITDB_ARGS="--data-checksums" postgres:13.18
29docker run --name lhrpg14 -h lhrpg14 -d -p 54327:5432 -e POSTGRES_PASSWORD=lhr -e TZ=Asia/Shanghai -e POSTGRES_INITDB_ARGS="--data-checksums" postgres:14.15
30docker run --name lhrpg15 -h lhrpg15 -d -p 54328:5432 -e POSTGRES_PASSWORD=lhr -e TZ=Asia/Shanghai -e POSTGRES_INITDB_ARGS="--data-checksums" postgres:15.10
31docker run --name lhrpg16 -h lhrpg16 -d -p 54329:5432 -e POSTGRES_PASSWORD=lhr -e TZ=Asia/Shanghai -e POSTGRES_INITDB_ARGS="--data-checksums" postgres:16.6
32docker run --name lhrpg17 -h lhrpg17 -d -p 54330:5432 -e POSTGRES_PASSWORD=lhr -e TZ=Asia/Shanghai -e POSTGRES_INITDB_ARGS="--data-checksums" postgres:17.2
33
34
35
36docker exec -it lhrpg17 bash
37
38docker exec -it lhrpg17 psql -U postgres -d postgres
39
40select * from pg_tables;
41select version();
42
43create user lhr with password 'lhr' superuser login;
44
45
46psql -U postgres -h 172.17.0.12 -d postgres
47psql -U postgres -h 192.168.8.8 -p 54324 -d postgres -W
48
49
50
51cat  << EOF > /tmp/pg_hba.conf
52# TYPE  DATABASE    USER    ADDRESS       METHOD
53local     all       all                    trust
54host      all       all    ::1/128         trust
55host      all       all   127.0.0.1/32     trust
56host      all       all    0.0.0.0/0        md5
57host   replication  all    0.0.0.0/0        md5
58EOF
59
60
61
62-- Debian中的PG
63sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
64wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
65apt-get update -y
66sudo apt-get -y install postgresql

3、登陆测试

 1-- docker直接登陆
2docker exec -it lhrpg17 psql -U postgres -d postgres
3
4-- 本地登陆
5docker exec -it lhrpg17 bash
6su - postgres
7psql
8
9
10-- 远程登陆
11psql -U postgres -h 192.168.8.8 -d postgres -p54327
12
13-- 从Postgresql 9.2开始,还可以使用URI格式进行远程连接:psql postgresql://myuser:mypasswd@myhost:5432/mydb
14psql postgresql://postgres:lhr@192.168.8.8:54327/postgres

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

 1[root@alldb ~]# docker exec -it lhrpg17 psql -U postgres -d postgres
2psql (17.2 (Debian 17.2-1.pgdg120+1))
3Type "help" for help.
4
5postgres=# select version();
6                                                       version                                                       
7---------------------------------------------------------------------------------------------------------------------
8 PostgreSQL 17.2 (Debian 17.2-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
9(1 row)
10
11
12
13postgres=# \l
14                                                    List of databases
15   Name    |  Owner   | Encoding | Locale Provider |  Collate   |   Ctype    | Locale | ICU Rules |   Access privileges   
16-----------+----------+----------+-----------------+------------+------------+--------+-----------+-----------------------
17 postgres  | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |        |           | 
18 template0 | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |        |           | =c/postgres          +
19           |          |          |                 |            |            |        |           | postgres=CTc/postgres
20 template1 | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |        |           | =c/postgres          +
21           |          |          |                 |            |            |        |           | postgres=CTc/postgres
22(3 rows)
23
24postgres=# 
25
26
27postgres=# CREATE DATABASE lhrdb WITH OWNER=postgres ENCODING='UTF-8';
28CREATE DATABASE
29postgres=# \c lhrdb
30You are now connected to database "
lhrdb" as user "postgres".
31lhrdb=#
32lhrdb=# create table student (
33lhrdb(#   id integer not null,
34lhrdb(#   name character(32),
35lhrdb(#   number char(5),
36lhrdb(#   constraint student_pkey primary key (id)
37lhrdb(# );
38CREATE TABLE
39lhrdb=#
40lhrdb=# \d student
41                 Table "
public.student"
42 Column |     Type      | Collation | Nullable | Default
43--------+---------------+-----------+----------+---------
44 id     | integer       |           | not null |
45 name   | character(32) |           |          |
46 number | character(5)  |           |          |
47Indexes:
48    "
student_pkey" PRIMARY KEY, btree (id)
49
50
51lhrdb=#
52lhrdb=# INSERT INTO student (id, name, number) VALUES (1, '张三', '1023');
53INSERT 0 1
54lhrdb=# SELECT * FROM student WHERE id=1;
55 id |                name                | number
56----+------------------------------------+--------
57  1 | 张三                               | 1023
58(1 row)
59

是不是很方便呢。

4、麦老师自制PG环境汇总

麦老师制作了2个镜像,这2个镜像中包括了PG 9.4、9.6、10、11、12、13、14、15、16、17各个版本,都是采用源码安装,也包括yum源安装的从11到15版本,安装了pgBackRest和pg_rman,可以直接使用,满足各类测试要求:

 1-- CentOS 7.6  glibc-2.17  pgBackRest 2.52.1
2docker rm -f lhrpgall
3docker run -itd --name lhrpgall -h lhrpgall \
4  -p 25432-25445:5432-5445  -p 122:22 -p 189:3389 \
5  -v /sys/fs/cgroup:/sys/fs/cgroup \
6  --restart=always \
7  --privileged=true lhrbest/lhrpgall:5.0 \
8  /usr/sbin/init
9docker exec -it lhrpgall bash
10
11systemctl status pg94 pg96 pg10 pg11 pg12 pg13 pg14 pg15 pg16 pg17
12systemctl status postgresql-15.service 
13
14
15[root@lhrpgall /]# ps -ef|grep postgres | grep bin
16postgres    5376       1  0 14:54 ?        00:00:00 /usr/pgsql-15/bin/postmaster -D /var/lib/pgsql/15/data/
17pg17         269       1  0 10:44 ?        00:00:00 /pg17/pg17/bin/postgres -D /pg17/pgdata -p 5442
18pg16         239       1  0 12:11 ?        00:00:00 /pg16/pg16/bin/postgres -D /pg16/pgdata -p 5441
19pg15         229       1  0 12:11 ?        00:00:00 /pg15/pg15/bin/postgres -D /pg15/pgdata -p 5440
20pg14         235       1  0 12:11 ?        00:00:00 /pg14/pg14/bin/postgres -D /pg14/pgdata -p 5439
21pg13         232       1  0 12:11 ?        00:00:00 /pg13/pg13/bin/postgres -D /pg13/pgdata -p 5438
22pg12         249       1  0 12:11 ?        00:00:00 /pg12/pg12/bin/postgres -D /pg12/pgdata -p 5437
23pg11         244       1  0 12:11 ?        00:00:00 /pg11/pg11/bin/postgres -D /pg11/pgdata -p 5436
24pg10         231       1  0 12:11 ?        00:00:00 /pg10/pg10/bin/postgres -D /pg10/pgdata -p 5435
25pg96         247       1  0 12:11 ?        00:00:00 /pg96/pg96/bin/postgres -D /pg96/pgdata -p 5434
26pg94         243       1  0 12:11 ?        00:00:00 /pg94/pg94/bin/postgres -D /pg94/pgdata -p 5433
27
28
29
30
31
32
33-- openEuler 22.03  glibc-2.34    pgBackRest 2.54  pg_rman各个版本
34docker rm -f lhrpgalloe
35docker run -itd --name lhrpgalloe -h lhrpgalloe \
36  -p 35432-35445:5432-5445  -p 322:22 -p 389:3389 \
37  -v /sys/fs/cgroup:/sys/fs/cgroup \
38  --restart=always \
39  --privileged=true lhrbest/lhrpgalloe:5.0 \
40  /usr/sbin/init
41docker exec -it lhrpgalloe bash
42
43systemctl status pg94 pg96 pg10 pg11 pg12 pg13 pg14 pg15 pg16 pg17
44systemctl status postgresql-17.service 
45
46
47[root@lhroepgall soft]$ ps -ef|grep post | grep bin
48pg17       17375       1  0 12:15 ?        00:00:00 /pg17/pg17/bin/postgres -D /pg17/pgdata -p 5442
49pg16       28270       1  0 12:20 ?        00:00:00 /pg16/pg16/bin/postgres -D /pg16/pgdata -p 5441
50pg15       40039       1  0 12:23 ?        00:00:00 /pg15/pg15/bin/postgres -D /pg15/pgdata -p 5440
51pg14       54454       1  0 12:26 ?        00:00:00 /pg14/pg14/bin/postgres -D /pg14/pgdata -p 5439
52pg13       65946       1  0 12:30 ?        00:00:00 /pg13/pg13/bin/postgres -D /pg13/pgdata -p 5438
53pg12       77194       1  0 12:32 ?        00:00:00 /pg12/pg12/bin/postgres -D /pg12/pgdata -p 5437
54pg11       88035       1  0 12:34 ?        00:00:00 /pg11/pg11/bin/postgres -D /pg11/pgdata -p 5436
55pg10      100301       1  0 13:00 ?        00:00:00 /pg10/pg10/bin/postgres -D /pg10/pgdata -p 5435
56pg96      110648       1  0 13:02 ?        00:00:00 /pg96/pg96/bin/postgres -D /pg96/pgdata -p 5434
57pg94      120306       1  0 13:04 ?        00:00:00 /pg94/pg94/bin/postgres -D /pg94/pgdata -p 5433

安装配置完成,若有不懂,可以私聊麦老师。






AiDBA
【PostgreSQL培训认证】【Oracle OCP、OCM、高可用(RAC+DG+OGG)培训认证】【MySQL OCP培训认证】【GreenPlum培训】【SQL Server培训】官网:www.dbaup.com,学习不止数据库
 最新文章