📌  相关文章
📜  将数据从一个 postgres 容器复制到另一个 - SQL (1)

📅  最后修改于: 2023-12-03 15:25:19.144000             🧑  作者: Mango

将数据从一个 postgres 容器复制到另一个 - SQL

在 PostgreSQL 中,可以使用 pg_dump 命令将数据库中的数据导出到一个文件中,然后使用 psql 命令将导出的文件中的数据导入到另一个数据库中。但是,如果您需要将数据从一个 PostgreSQL 容器复制到另一个 PostgreSQL 容器中,则可以使用 pg_dumppsql 命令的组合来实现。

步骤

以下是在 Linux 环境下将数据从一个 PostgreSQL 容器复制到另一个 PostgreSQL 容器的步骤:

  1. 使用 docker ps 命令查找正在运行的 PostgreSQL 容器的 ID。例如,假设您正在查找名为 my-postgres-container 的容器的 ID,请使用以下命令:
$ docker ps | grep my-postgres-container | awk '{ print $1 }'
  1. 使用 docker exec 命令登录到正在运行的 PostgreSQL 容器中。例如:
$ docker exec -it my-postgres-container bash
  1. 在容器中使用 pg_dump 命令将需要复制的数据库导出到一个文件中。例如,假设您需要将 my_database 数据库导出到一个名为 my_db.dump 的文件中,请使用以下命令:
$ pg_dump -U postgres -Fc -f /tmp/my_db.dump my_database

上面的命令中,-U 参数指定了要连接数据库的用户名(此处指定为 postgres),-Fc 参数告诉 pg_dump 使用自定义格式进行导出,以便能够在 psql 中使用 -Fc 参数进行导入。最后一个参数 my_database 指定要导出的数据库的名称。导出的文件将保存在容器的 /tmp 目录中。

  1. 退出容器:
$ exit
  1. 从容器中复制导出的文件到本地文件系统。例如,假设您正在将文件保存到 /tmp 目录中,请使用以下命令:
$ docker cp my-postgres-container:/tmp/my_db.dump /tmp/
  1. 使用 docker ps 命令查找另一个正在运行的 PostgreSQL 容器的 ID。

  2. 使用 docker exec 命令登录到正在运行的 PostgreSQL 容器中。

  3. 在容器中使用 psql 命令将导出的数据库文件中的数据导入到另一个 PostgreSQL 容器中的同名数据库中。例如,假设您将文件保存到 /tmp 目录中,并且另一个容器的名称为 my-other-postgres-container,请使用以下命令:

$ psql -U postgres -d my_database -h my-other-postgres-container -c "DROP SCHEMA IF EXISTS public CASCADE; CREATE SCHEMA public"
$ pg_restore -U postgres -d my_database -h my-other-postgres-container -Fc /tmp/my_db.dump

在上面的命令中,第一条命令使用 psql 命令在另一个容器中删除现有的 public 模式,并创建一个新的 public 模式(这是一个需要的步骤,以避免在导入数据时出现权限问题)。第二条命令使用 pg_restore 命令导入刚刚导出的数据库文件。其中,-U 参数指定了要连接数据库的用户名(此处指定为 postgres),-d 参数指定要导入数据的目标数据库名称,-h 参数指定目标 PostgreSQL 容器的主机名或 IP 地址。最后一个参数是需要导入的文件名。

结论

使用以上步骤,您可以轻松地将一个 PostgreSQL 容器中的数据复制到另一个 PostgreSQL 容器中。请注意,这些步骤假定您具有足够的权限来执行导出和导入操作。在生产环境中,请三思而后行,慎重考虑敏感数据的安全问题。