bro*_*ock 4 postgresql pg-dump
我想从pg_dumpall获取名称数据库并将其导入我的本地postgres.如果可能的话,我想在我的本地机器上使用不同的数据库名称.这可能吗?
bro*_*ock 10
看起来PostgreSQL没有内置的方法来实现这一点,所以我把一个脚本放在一起,可以为我处理这个问题.这是我学到的东西,并且在要点中有更多的评论,但简而言之:
pg_dumpall 包含几个SQL import语句,一个用于服务器上的每个数据库.
您可以通过搜索这两个字符串轻松找到每个数据库的开头和结尾:
\connect databasename 和 PostgreSQL database dump complete
这两个字符串之间的内容组成了每个导入.我省略了我创建的导出的第一行.\connect databasename在脚本顶部使用意味着数据库必须已存在.因此,如果要以不同的名称导入数据库,可以安全地删除第一行,并像这样运行导入:
psql new_databasename < databasename.sql
这需要很长时间才能在大型数据库上运行,因此我可能会在以后对其进行重构,以便在需要时加快速度,但是现在它可以正常工作.它还吐出了postgres.sql导出,我还没有测试过导入那个,但是如果你想从pg_dumpall中提取一个数据库,这就行了.
https://gist.github.com/brock/63830f11c0945f82f9ea
将此gist中的文件保存到〜/ bin中pg_extract,使其可执行,然后您可以通过传递原始sql转储的文件名来运行它:pg_extract postgresql_dump.sql.您将.sql在当前目录中的转储中为每个数据库提供一个文件.
编辑:我现在更新了脚本,以便您可以传递要提取的数据库的名称,它将停在那里.例如:pg_extract postgresql_dump.sql databasename输出单个databasename.sql
小智 6
这个小脚本可以做到。
#!/bin/bash
[ $# -lt 2 ] && { echo "Usage: $0 <postgresql dump> <dbname>"; exit 1; }
sed "/connect.*$2/,\$!d" $1 | sed "/PostgreSQL database dump complete/,\$d"
Run Code Online (Sandbox Code Playgroud)
(它写入 STDOUT,您必须将其通过管道传输到文件。)
| 归档时间: |
|
| 查看次数: |
4889 次 |
| 最近记录: |