既存のデータベースのスキーマを Postgresql に変換中です。手動エラーを避けるために、これを可能な限り自動化したいと考えています。
元のデータベースは CLUSTERED インデックスを使用していますが、PG には (実際には) クラスター化されたインデックスはありません。CLUSTERED インデックスのすべての出現箇所を、postgresql に相当するものに置き換える bash スクリプトを作成したいと考えています。
基本的に、次のような行を置換したい:
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 で始まる行を見つけます (行は 1 つ以上の改行以外の空白で始まる場合があります)
- テーブルの名前を保存します ( ONキーワードの後に 1 つ以上の空白が続きます)
- 上記の 1 で一致した行からクラスター化された単語を削除して、代替テキストを作成します
- 上記のステップ 3 の代替テキストに「\nCLUSTER $tablename」を追加します。
- ステップ 1 で一致した行を代替テキスト (ステップ 4 で取得) に置き換えます。
このロジックを bash スクリプトに組み込んで、処理するファイルを渡すことができるように誰か助けてもらえますか?
ちなみに、私はこれを行うために使用できると思ってsed
いましたが、sed のワンライナーとしてこれを行うのではなく、bash スクリプトを作成する方が簡単 (つまり、理解しやすい) かどうかはわかりませんが、提案を受け付けています。