📅  最后修改于: 2023-12-03 15:25:19.144000             🧑  作者: Mango
在 PostgreSQL 中,可以使用 pg_dump
命令将数据库中的数据导出到一个文件中,然后使用 psql
命令将导出的文件中的数据导入到另一个数据库中。但是,如果您需要将数据从一个 PostgreSQL 容器复制到另一个 PostgreSQL 容器中,则可以使用 pg_dump
和 psql
命令的组合来实现。
以下是在 Linux 环境下将数据从一个 PostgreSQL 容器复制到另一个 PostgreSQL 容器的步骤:
docker ps
命令查找正在运行的 PostgreSQL 容器的 ID。例如,假设您正在查找名为 my-postgres-container
的容器的 ID,请使用以下命令:$ docker ps | grep my-postgres-container | awk '{ print $1 }'
docker exec
命令登录到正在运行的 PostgreSQL 容器中。例如:$ docker exec -it my-postgres-container bash
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
目录中。
$ exit
/tmp
目录中,请使用以下命令:$ docker cp my-postgres-container:/tmp/my_db.dump /tmp/
使用 docker ps
命令查找另一个正在运行的 PostgreSQL 容器的 ID。
使用 docker exec
命令登录到正在运行的 PostgreSQL 容器中。
在容器中使用 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 容器中。请注意,这些步骤假定您具有足够的权限来执行导出和导入操作。在生产环境中,请三思而后行,慎重考虑敏感数据的安全问题。