zoukankan      html  css  js  c++  java
  • 浅析docker安装postgresql的基本使用及解决pg_dump导出数据库报错Command pg_dump not found的问题

    一、docker 安装 PG 的基本使用

    1、查看本地pg镜像  ——  需要先 pull 下来一个合适版本的 postgressql 镜像,然后再查看

    docker images | grep postgres

    2、初始化镜像   ——  需要先创建数据卷

    docker run --name postgres2 -e POSTGRES_PASSWORD=password -p 5432:5432 -v pgdata:/var/lib/postgresql/data -d postgres

      -p:端口映射

      -v:将数据存到宿主服务器

      -e POSTGRES_PASSWORD 密码(默认用户名postgres)

      -e TZ=PRC时区,中国

      -d:后台运行

      --name:容器名称

      注意:时区问题   ——   如果在启动容器时不设置时区,默认为UTC,使用 now() 设置默认值的时候将有时间差。

    3、进入镜像

    [root@localhost home]# docker exec -it postgres2 /bin/bash
    root@72c5af7ed83c:/# ls
    bin  boot  dev  docker-entrypoint-initdb.d  docker-entrypoint.sh  etc  home  lib  lib64  media  
    mnt opt
    proc root run sbin srv sys tmp usr var

      镜像的data目录在 /var/lib/postgresql/data

    root@72c5af7ed83c:/# cd /var/lib/postgresql/data
    root@72c5af7ed83c:/var/lib/postgresql/data# ls
    base          pg_dynshmem    pg_logical    pg_replslot   pg_stat      pg_tblspc    pg_wal                postgresql.conf
    global        pg_hba.conf    pg_multixact  pg_serial     pg_stat_tmp  pg_twophase  pg_xact               postmaster.opts
    pg_commit_ts  pg_ident.conf  pg_notify     pg_snapshots  pg_subtrans  PG_VERSION   postgresql.auto.conf  postmaster.pid

    4、postgresql 的工具目录是: /usr/lib/postgresql/11/bin

    5、连接数据库、数据库操作

    $ psql -Upostgres
    
    psql (12.2 (Debian 12.2-1.pgdg100+1))
    Type "help" for help.
    
    postgres=#
    // 创建数据库
    postgres=# CREATE DATABASE DB1;
    CREATE DATABASE
    postgres=# CREATE DATABASE DB2;
    CREATE DATABASE
    
    // 查看数据库
    postgres=# l
                                     List of databases
       Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges
    -----------+----------+----------+------------+------------+-----------------------
     db1       | postgres | UTF8     | en_US.utf8 | en_US.utf8 |
     db2       | postgres | UTF8     | en_US.utf8 | en_US.utf8 |
     postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 |
     template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
               |          |          |            |            | postgres=CTc/postgres
     template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
               |          |          |            |            | postgres=CTc/postgres
    (5 rows)
    
    // 切换数据库
    postgres=# c db1

    二、导出数据库进行备份迁移报错 Command pg_dump not found 的问题

      我们现在需要导出数据库的数据库表,由于服务器上没有安装 pg_dump 命令,使用 pg_dump 时就会报错:Command pg_dump not found,有 2 种方式去解决。一种是安装 pg_dump ,需要安装 pg 的客服端啥的,还需要注意版本,会麻烦一点;另一种就是可以直接在容器里操作。

    1、进入镜像的data目录:/var/lib/postgresql/data

      这个镜像的data目录,我们是利用数据卷挂载在宿主主机上的,也可以宿主主机上的这个目录 /var/lib/docker/volumes/pgdata/_data ,宿主机的这个目录和容器的 data 目录会是同步更新的

      那么我们可以在 容器 data 目录 mkdir sqldata,然后 cd sqldata

    2、进入 sqldata 目录,执行 pg_dump 命令

      容器内部:pg_dump -U root -s -f dump.sql edu

      服务器上:pg_dump -h 127.0.0.1 -p 5432 -U root -s -f dump.sql edu

      需要注意的是服务器上得指定  -h 及 -p

      两种导出的 dump.sql 是一样的。

    3、在容器内执行 pg_dump -U root -s -f dump.sql edu,之后我们可以看到 sqldata 目录里生成一个 dump.sql 文件;退出容器,我们进入数据卷目录,也可以看到 sqldata 目录及里面的 dump.sql 文件。

  • 相关阅读:
    Java数组
    Java非访问修饰符
    Java 循环结构
    Java修饰符
    Java语句
    DDK
    HDC中的前景色与背景色
    如何控制一个程序只能有一个进程
    把一个bmp转换成cur显示出来(掩码mask)
    怎么设置IE代理服务器
  • 原文地址:https://www.cnblogs.com/goloving/p/15092391.html
Copyright © 2011-2022 走看看