来自 k8s pod 的数据库 pg_dump 以目录格式

问题描述 投票:0回答:1

我需要使用 pg_dump 创建 Postgres 数据库转储。数据库位于 Kubernetes Pod 中。我正在尝试以目录格式获取转储,而不仅仅是单个 .sql 文件。但我不明白如何指定目录。

当我尝试这个命令时:

kubectl exec patroni-0 -- bash -c "pg_dump -U username db_name --format=d" > db_dump_folder

我收到错误:

pg_dump: [directory archiver] no output directory specified
command terminated with exit code 1

提前致谢!

database postgresql kubernetes pg-dump
1个回答
0
投票

当使用

pg_dump
创建目录格式的数据库转储时,您需要指定
pg_dump
可以直接写入的输出目录。您使用的命令尝试将 stdout 重定向到目录,这不是目录格式中
pg_dump
的工作原理。相反,您需要直接在
-f
命令中使用
--file
选项或
pg_dump
选项指定目录。

但是,由于转储需要在 Kubernetes pod 内完成,因此本地计算机上要存储转储的目录必须可供 pod 访问,或者您可以将其存储在 pod 中并复制到本地。

对于第二个选项,你可以这样做:

  1. 在 pod 内执行
    pg_dump
    ,指定 pod 上用于转储的临时目录:
kubectl exec patroni-0 -- bash -c "mkdir /tmp/db_dump"
kubectl exec patroni-0 -- bash -c "pg_dump -U username -d db_name --format=d -f /tmp/db_dump"
  1. 将转储从 pod 复制到本地计算机:
kubectl cp patroni-0:/tmp/db_dump ./db_dump_folder
  1. 然后就可以清理pod中的临时目录了:
kubectl exec patroni-0 -- bash -c "rm -rf /tmp/db_dump"

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.