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

标签 bash postgresql psql

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

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

psql MyDatabase < mydata.sql

有没有办法通过正则表达式查找/替换过滤器来传输数据?我可以使用 grep 等 native Linux 命令行实用程序执行某些操作吗?

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

最佳答案

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

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

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

关于bash - 如何在导入期间对 pg_dump 数据运行过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38259759/

相关文章:

bash - 如何用scp替换子文件夹中的文件?

bash - 无法评估函数的脚本参数

postgresql - 在 psql 中显示查询结果时,有没有办法设置列的最大宽度?

bash - 无法在 Jenkins 管道作业中通过 DSL (groovy) 存储 sh 命令输出

python - 替换/删除 Bash 中其他两行之间的行

java - hibernate JPA 生成错误的查询 - ManyToMany

postgresql - PostgreSQL 中有没有办法找到所有使用外部数据包装器的 View ?

sql - 如何将列添加到 generate_series 查询

ruby-on-rails - 在 Rails 中检索数据库记录

postgresql - 如何在 Postgresql 中创建多列 GiST 索引