我正在将现有数据库的模式转换为 Postgresql。我想尽可能多地自动化,以避免手动错误。
原始数据库使用 CLUSTERED 索引,但是 PG 并没有(真的)有聚集索引。我想编写一个 bash 脚本来将所有出现的 CLUSTERED 索引替换为 postgresql 等价物。
本质上,我想像这样替换行:
CREATE clustered INDEX idx_foobar ON foobar (f1, f2, f3, f4,f5);
用这样的 2 行替换:
CREATE INDEX idx_foobar ON foobar (f1, f2, f3, f4,f5);
CLUSTER foobar;
我想我已经制定了匹配逻辑,我只需要正则表达式的帮助,因为我不是很熟悉。似乎有效的匹配逻辑如下:
- 查找以 CREATE clustered INDEX 开头的行(该行可能以一个或多个非换行符开头)
- 存储表的名称(它在ON关键字后跟一个或多个空格)
- 从上面 1 中匹配的行中删除聚集的单词以创建替换文本
- 将“\nCLUSTER $tablename”附加到上述步骤 3 中的替换文本
- 用替换文本替换第 1 步中的匹配行(在第 4 步中获得)
有人可以帮助我将此逻辑合并到 bash 脚本中,以便我可以将它传递给要处理的文件吗?
顺便说一句,我认为我可以使用它sed
来执行此操作,但我不知道编写 bash 脚本是否会更容易(即更容易理解),而不是尝试在 sed 中作为单行来执行此操作 - 但我我愿意接受建议。