恢复时重新定位 postgres 转储

relocate postgres dump when restoring

有没有办法在恢复时重新定位(?)一个 postgres 转储?

我想将暂存数据库中的转储恢复到所有者和架构与暂存不同的开发数据库。

是否有另一种方法可以实现此目的,然后在转储中进行搜索和替换?

要给出具体值:我的暂存数据库拥有所有者“iplister”和模式“public”,而我想恢复到所有者“developer”和模式“csapi”。

目前我有

pg_dump \
  postgresql://$OWNER:$PASSWORD@$HOST/$DB | perl -pe '
    s/[ \x27]\Kpublic\./csapi./g;
    s/\biplister\b/developer/g;
  ' > work/prod-db-$( date +%Y-%m-%d_%H-%M-%S ).sql

创建转储并直接搜索和替换。

当然,当转储在任何数据集中包含搜索词之一时,这很容易出错。这就是为什么我要求正确的方法。

我现在的解决方案是:

  pg_dump \
    --no-owner \
    --clean \
    --if-exists \
    postgresql://$OWNER:$PASSWORD@$HOST/$DB | perl -pe '
      if (/^(ALTER|COPY|CREATE|SELECT|DROP)/ .. /;/) {
        s/[ \x27]\Kpublic\./csapi./g;
      } elsif (/^-- /) {
        s/[ \x27]\Kpublic\./csapi./g;
      }
    ' 

elsif 不是必需的,但会注意注释。