如何在导入期间对pg_dump数据运行过滤器?

时间:2016-07-08 05:53:19

标签: bash postgresql psql

在Mac OSX(iTerm2)上使用没有外部应用程序的终端,除了postgres之外,我想在一个相当大的(52 MB)pg_dump数据文件上运行一些正则表达式查找/替换,因为它被导入到PostgreSQL数据库中。我需要在转储文件命中PostgreSQL之前执行此操作,因为我必须转换创建和修改表的传入SQL查询。

我用来导入数据的shell命令是:

psql MyDatabase < mydata.sql

有没有办法通过正则表达式查找/替换过滤器管道数据?我可以使用本机Linux命令行实用程序(如grep?

)执行某些操作

或者,我如何批处理我的正则表达式并将它们应用到我的转储文件中,然后将更改保存到新文件中?

2 个答案:

答案 0 :(得分:2)

您可以使用了解正则表达式的sed

例如,要使用“anotherschema”替换所有出现的“myschema”字围边界,您可以使用:

sed -e 's/\bmy\(schema\)\b/another\1/g' mydata.sql | psql MyDatabase

答案 1 :(得分:1)

  

或者,我如何批处理我的正则表达式并将它们应用到我的转储中   文件,然后将更改保存到新文件?

sed -e 's/\bmy\(schema\)\b/another\1/g' mydata.sql >mysqlnew.sql

这会将输出重定向到名为mysqlnew.sql的新文件。

请注意,sed支持就地编辑选项。使用inplace edit -i选项,上面的命令可以替换为

sed i.bak -e 's/\bmy\(schema\)\b/another\1/g' mydata.sql

此命令会将原始mydata.sql的副本复制到mydata.sql.bak和 将更改永久写入mydata.sql