如何从Docker容器生成Postgresql Dump?

Ces*_*ira 23 postgresql containers docker

我想有一种方法进入Postgresql容器并从中获取数据转储.

Ces*_*ira 27

从UNIX终端使用以下命令:

docker exec <container_name> pg_dump <schema_name> > backup
Run Code Online (Sandbox Code Playgroud)

以下命令将仅转储所有表中的插入:

docker exec <container_name> pg_dump --column-inserts --data-only  <schema_name> > inserts.sql
Run Code Online (Sandbox Code Playgroud)

  • 在哪里指定用户的用户和密码? (4认同)
  • @VaTo您可以这样指定用户:`docker exec &lt;container_name&gt; pg_dump -U &lt;user&gt; --column-inserts --data-only &lt;schema_name&gt;&gt; inserts.sql` (3认同)

Jek*_*kis 15

我有一个名为postgres的容器,装有卷-v /backups:/backups

要备份gziped DB my_db,我使用:

docker exec postgres pg_dump -U postgres -F t my_db | gzip >/backups/my_db-$(date +%Y-%m-%d).tar.gz
Run Code Online (Sandbox Code Playgroud)

我现在有

user@my-server:/backups$ ls
my_db-2016-11-30.tar.gz
Run Code Online (Sandbox Code Playgroud)

  • 我设法用`docker exec -t postgres bash -c 'pg_dump -U postgres -F t my_db | 解决了这个问题。gzip &gt;/backups/my_db-$(date +%Y-%m-%d).tar.gz'` (3认同)
  • 小提示:这实际上并不是在执行“tar gz”,它只是在执行 gz,但您使用扩展名 tar 命名 SQL 文件,然后对其进行 gzip 压缩。如果您对其进行枪压缩,您会得到一个名为“my_db-date.tar”的不可读文件,但如果您将 .tar 重命名为 .sql,它实际上是一个 SQL 文件。如果您确实想要“.tar.gz”文件扩展名,您可能应该将其输出为“filename.gz”或使用“tar -cz” (3认同)

jon*_*njg 8

尽管上面的挂载点解决方案看起来很有希望,但经过多次迭代后,以下是唯一对我有用的解决方案:

docker run -it  -e PGPASSWORD=my_password postgres:alpine  pg_dump  -h hostname -U my_user my_db > backup.sql
Run Code Online (Sandbox Code Playgroud)

在我的情况下有什么独特之处:我在需要传入的数据库上有一个密码;需要传入标签(高山);最后,psql 工具的主机版本与 docker 版本不同。

  • 与之前的答案类似,它也有效 `docker exec -e PGPASSWORD=mypass container pg_dump -U myuser mydb &gt; file.bkup.sql` (5认同)

Ham*_*MLI 7

这个使用container_name而不是database_scheme的,对我有用:

docker exec {container_name} pg_dump -U {user_name} > {backup_file_name}
Run Code Online (Sandbox Code Playgroud)

例如,对我来说,数据库名称、用户和密码应该在 docker-compose.yaml 中声明

我希望它可以帮助某人