我每天都使用以下命令开发postgres开发框:pg_dumpall -h 127.0.0.1 -U user -w | gzip blah.gz
由于9.0现在是候选版本,我想每天将这个每日备份恢复到postgres9.0rc1框进行测试,但是我不知道如何反复编写脚本.有一些我可以用来做这个的目录吗?
hal*_*dan 18
您可以执行"drop cluster"和"create cluster",它将自动擦除所有数据库.擦除$ PGDATA目录中的所有数据并使用以下命令重新启动集群:
initdb -D /usr/local/pgsql/data
Run Code Online (Sandbox Code Playgroud)
Fer*_*ida 14
您可以使用:
$ pg_dropcluster 9.2 main
$ pg_createcluster 9.2 main
$ pg_ctlcluster 9.2 main start
$ pg_restore -f your_dump_file
Run Code Online (Sandbox Code Playgroud)
其中9.2= cluster version和main=cluster name
Joh*_*aus 10
诚然,这个问题此时已有 9 年历史,但它仍然是删除所有数据库的第二个谷歌结果。如果您只想从 N 个 DB 转到 0,而无需使用您的配置,也不想翻阅文件系统,这是一个更好的答案:
根据答案,以下脚本将生成 N 个drop database命令,每个非模板 DB 一个:
select 'drop database "'||datname||'";'
from pg_database
where datistemplate=false;
Run Code Online (Sandbox Code Playgroud)
从那里,您可以手动编辑和运行,或进一步传输到脚本中。这是一个有点冗长的单行:
echo \pset pager off \copy (select 'drop database "'||datname||'";' from pg_database where datistemplate=false) to STDOUT; | psql -U <user> -d postgres | <appropriate grep> | psql -U <user> -d postgres
解释:
echo \pset pager off \copy (select 'drop database "'||datname||'";' from pg_database where datistemplate=false) to STDOUT; 生成一个字符串供 psql 执行
\pset pager off 确保您获得所有记录而不是(54 行)废话\copy (select 'drop database "'||datname||'";' from pg_database where datistemplate=false) to STDOUT;执行上述查询,将结果发送到 STDOUT。我们必须这样做,因为我们以\pset.| psql -U <user> -d postgres通过管道将字符串输入到 psql 中,然后执行它。替换<user>为您要使用的用户| <appropriate grep> 用于去除“寻呼机使用已关闭”行
findstr /v "Pager"或findstr /b "drop"grep 'drop'| psql -U <user> -d postgres将生成的drop database命令集再次通过管道传输到 psql 中,由 psql 执行它们,从而删除所有数据库postgres数据库。SELECT如果您不希望发生这种情况,您可以在 the或 grep 中删除它。| 归档时间: |
|
| 查看次数: |
40283 次 |
| 最近记录: |