Docker部署postgresql-11以及主从配置

Docker部署postgresql-11以及主从配置







一. Docker部署postgresql-11(简单版)

1. 拉取镜像

docker pull docker.io/postgres:11

2.启动命令脚本

vi startPostgres.sh

填入以下内容:

docker run -d --name postgresql-11 \
--restart=always  \
-v /postgresql/data:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=123456 \
-p 5432:5432 \
docker.io/postgres:11

3.给脚本写权限:

chmod +x startPostgres.sh

4.执行启动脚本:

./startPostgres.sh

5.查看日志,启动报错:

docker logs postgresql-11

2019-06-13 12:35:21.977 UTC [1] FATAL:  configuration file "/var/lib/postgresql/data/postgresql.conf" contains errors
2019-06-13 12:35:23.182 UTC [1] LOG:  invalid value for parameter "lc_messages": "zh_CN.UTF-8"
2019-06-13 12:35:23.182 UTC [1] LOG:  invalid value for parameter "lc_monetary": "zh_CN.UTF-8"
2019-06-13 12:35:23.182 UTC [1] LOG:  invalid value for parameter "lc_numeric": "zh_CN.UTF-8"
2019-06-13 12:35:23.182 UTC [1] LOG:  invalid value for parameter "lc_time": "zh_CN.UTF-8"

6.在容器中安装中文编码:

>>docker exec -it postgresql-11 /bin/bash
1、root@9a36f3d4c0e9:/# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"


 
2、debian下安装 locale 并设置 zh_CN.UTF-8
root@9a36f3d4c0e9:/# apt-get install locales
Reading package lists... Done
Building dependency tree
Reading state information... Done
locales is already the newest version (2.24-11+deb9u4).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
 
 
3、root@9a36f3d4c0e9:/# dpkg-reconfigure locales
Locales to be generated: 468
Default locale for the system environment: 3
 
Generating locales (this might take a while)...
  zh_CN.UTF-8... done
Generation complete.

7.重启动docker容器:

doker start postgresql-11










二. 【最全】从Docker中运行postgresql数据库

一. Docker 中使用postgresql

有三种方式:Dockerfile 启动、docker-compose启动、通过命令行
我采用的是docker-compose.yml 的方式,大家可以自己玩一玩其他的两种方式,参考这个链接

1. Linux 下内核版本

uname -a

在这里插入图片描述

2. docker , docker-compose 版本

 docker --version
docker-compose --version

在这里插入图片描述

3. 根据自己的系统配置拉取相应的official images

postgresql docker images list

如果安装过程遇到以下报错,

可以更换以下版本的pg 镜像

在这里插入图片描述

4. 安装步骤(docker 不熟悉的自觉点击docker docs)

1. 拉取镜像

docker pull postgres:15-bullseye
在这里插入图片描述

2. 创建并进入 pg 目录

mkdir dockerdata/postgresql && cd dockerdata/postgresql

3. docker-compose.yml 内容如下

vim docker-compose.yml

version: '2.3'
services:
  pgdb:
    image: postgres:15-bullseye
    restart: always
    environment:
      POSTGRES_PASSWORD: ggyy
      POSTGRES_USER: ggyy
    ports:
      - 5439:5439
    volumes:
      - ./postgres-db:/data/postgres
volumes:
  postgres-db:
    driver: local

4. 启动数据库容器

docker-compose -f docker-compose.yml up -d

5. 进入数据库

docker exec -it postgresql_pgdb_1 psql -Uggyy

看到这个页面恭喜你,成功了
在这里插入图片描述
明天学习docker服务日志管理,创建数据库,增删改查指令学习。




二. 从小白到大佬的 pgsql 学习-基础语法

一. 导入数据

在正式开始学习之前,我们需要有个数据库,再有一个数据表。

1. 搭建数据库

关于如何搭建一个pgsql数据库环境,可以参考我的上一个blog Docker 搭建Postgresql数据库

2. 导入数据表

到这个地址https://github.com/jOOQ/sakila/tree/main/postgres-sakila-db下载两个文件
 
1.postgres-sakila-schema.sql - 此文件包含了创建数据库结构的 sql 脚本,包含表,函数,存储过程,触发器等。
2.postgres-sakila-insert-data.sql - 此文件包含了导入数据的 sql 脚本

3. 下载后将两个文件分别 docker cp 到postgresql 容器内
sudo docker cp postgres-sakila-insert-data.sql f161f67ba0e0:/
4. 依次运行如下指令开始导入
$ docker exec -it postgresql_pgdb_1 bash
$ psql -Uggyy -f postgres-sakila-schema.sql
$ psql -Uggyy -f postgres-sakila-insert-data.sql
5. 遇到语法格式错误,去hub链接下,把原始内容复制下,粘贴在同文件中即可.
6. 验证是否导入成功
$ exit # 退出容器
$ docker exec -it postgresql_pgdb_1 psql -Uggyy # 重新进入数据库
$ \dt # 列出数据表

看到这个表,恭喜你,又成功了

在这里插入图片描述

二. PostgreSQL 基础命令

1. SELECT
1. 普通查找
 SELECT 
 	first_name as fname, 
 	last_name as lname, 
 	email 
 FROM customer;
2.如果想检索结果显示的好看些,可以使用\x , 再SELECT,退出的话再使用\x即可。
3. 使用带有表达式的
SELECT 
	first_name ||' '|| last_name,
	email
FROM customer;
2. WHERE
语法结构如下:
SELECT columns_list
FROM table_name
WHERE query_condition;
举个例子
1. where 子句和LIKE 混用
SELECT first_name,
  last_name
FROM customer
WHERE first_name LIKE 'ANN%';
2. where 子句和 BETWEEN 混用
SELECT first_name,
  LENGTH(first_name) name_length
FROM customer
WHERE first_name LIKE 'A%'
  AND LENGTH(first_name) BETWEEN 3 AND 5
ORDER BY name_len
posted @ 2023-10-19 22:25  坦笑&&life  阅读(4)  评论(0编辑  收藏  举报  来源