我想删除除了几个数据库以外的所有数据库。
假设有20个数据库,我想删除其中的18个,但保留2个最新的并且正在使用的数据库。
请提供建议。
请提供建议。
首先,在psql终端中执行以下查询。
select 'drop database "'||datname||'";'
from pg_database
where datistemplate=false;
这将为所有数据库生成drop database
命令。将结果复制到文本编辑器中,并排除(删除)您想要保留的内容,然后将其保存为dd.sql
文件。并像这样执行:
psql -d postgres -f dd.sql
psql -d postgres < <( psql -Atc "select 'drop database \"'||datname||'\";' from pg_database where datistemplate=false /* AND add_extra_conditions_here */;")
这段代码的作用是在PostgreSQL数据库中删除所有非模板数据库。其中,“add_extra_conditions_here”是可选的额外过滤条件。请注意,这段代码可能会导致未经意的数据丢失,请谨慎使用。 - estani正如最佳答案所展示的那样,对于我来说,删除多个数据库特别麻烦,因此我编写了一个帮助程序脚本来减轻这个操作:https://github.com/Kraymer/ezdropdb
简而言之,您输入要删除的数据库必须匹配的模式,然后列出所有数据库名称的结果,并在最后提示您输入要删除哪些(请参见项目页面上的屏幕截图)。