我每天都使用postgres开发框: pg_dumpall -h 127.0.0.1 -U user -w | gzip blah.gz
由于9.0现在是候选版本,我想每天将这个每日备份恢复到postgres9.0rc1框进行测试,但是我不知道如何重复编写脚本。是否有一些目录可以让我这样做?
答案 0 :(得分:16)
您可以执行“drop cluster”和“create cluster”,这将自动删除所有数据库。擦除$ PGDATA目录中的所有数据并使用以下命令重新启动集群:
initdb -D /usr/local/pgsql/data
答案 1 :(得分:14)
您可以使用:
$ pg_dropcluster 9.2 main
$ pg_createcluster 9.2 main
$ pg_ctlcluster 9.2 main start
$ pg_restore -f your_dump_file
其中9.2
= cluster version
和main
= cluster name
答案 2 :(得分:1)
在这一点上,问题已经存在了9年,但是它仍然是删除所有数据库的第二个Google结果。如果您只想从N个DB转到0个而不使用配置,也不想在文件系统中翻找,这是一个更好的答案:
https://stackoverflow.com/a/24548640/3499424
从答案中,以下脚本将生成N个drop database
命令,每个非模板DB都会生成一个命令:
select 'drop database "'||datname||'";'
from pg_database
where datistemplate=false;
从那里,您可以手动编辑和运行,也可以将其进一步传送到脚本中。这是一个有点冗长的单行代码:
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>
用于剥离“ Pager的使用已关闭”行
findstr /v "Pager"
或findstr /b "drop"
grep 'drop'
| psql -U <user> -d postgres
将生成的drop database
命令集再次管道传输到psql,psql执行它们,从而删除所有数据库postgres
数据库。如果您不希望这种情况发生,可以在SELECT
或grep中删除它。答案 3 :(得分:0)
将数据库数据移动到其他位置可以实现与删除相同的功能,并且您可以轻松地将其移回以防您改变主意(但在任何情况下都要小心并备份数据)。
1)在某处创建一个目录(例如/home/USERNAME/BACKUPDIR
)。
2)作为超级用户访问postgresql数据目录(Fedora,例如/var/lib/pgsql/
)
3)将data
移至备用文件夹:mv data /home/USERNAME/BACKUPDIR
4)然后使用例如重新启动新数据库。 sudo postgresql-setup --initdb --unit postgresql