恢复时重新定位postgres转储

问题描述

还原时是否有办法重新定位(?)postgres转储?

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

还有另一种方法可以做到这一点,然后在转储中进行搜索并替换吗?

给出具体值:我的登台数据库具有所有者“ iplister”和架构“ public”,而我想恢复到所有者“开发者”和架构“ 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不是必需的,但要注意注释。