Oracleの移行対象オブジェクトの例
- Function
- Index
- Materialized view
- Procedure
- Sequence
- Synonym
- Table
- View
- その他
1. Function
直接互換性がないOracleの関数はPostgreSQLの対応する関数に置き換える必要がある。
例えば、NVL、sysdate、DECODE のような関数がある。
NVL関数
Oracle
SELECT NVL(column_name, 'default_value、NULL の場合に代替値') FROM table_name;
Postgresql
SELECT COALESCE(column_name, 'default_value、NULL の場合に代替値') FROM table_name;
sysdate関数
Oracle
SELECT SYSDATE FROM dual;
Postgresql
SELECT CURRENT_TIMESTAMP;
-- または
SELECT NOW();
DECODE関数
Oracle
SELECT DECODE(status, 1, '状態1', 2, '状態2', 'その他') FROM table_name;
Postgresql
SELECT CASE
WHEN status = 1 THEN '状態1'
WHEN status = 2 THEN '状態2'
ELSE 'その他'
END
FROM table_name;
2. Index
OracleのIndex Fast Full ScanやIndex Skip Scanは、PostgreSQLでは直接的な対応はなく、異なるスキャン手法を使うことになるため、インデックスの再設計が必要。
3. Materialized view
Oracleでは、REFRESH を使ってマテリアライズドビューのデータを定期的に更新できるが、PostgreSQLではpg_cronや手動でのリフレッシュ処理を組み合わせる必要がある。
4. Procedure
OracleのPL/SQLとPostgreSQLのPL/pgSQLは構文が異なるため、プロシージャを移行する際にはコードの書き換えが必要。
例外処理、カーソルの扱い、変数の宣言方法、IF文やLOOPなど、全般的に違いがあるため、それに応じて変更を加える必要がある。
5. Sequence
OracleとPostgreSQLでシーケンスの使用方法はほぼ同じだが、(細かい内容は省略)
PostgreSQLにはSERIAL型を使うことでシーケンスを自動的に管理できる便利な機能がある。
なのでSequenceの移行はその数が減るかも知れない。
6. Synonym
PostgreSQLには SYNONYM がないので、SEARCH_PATH を適切に設定するか、ビューを活用する。
7. Table
dual:主に値を取得するために使用されるOracleのテーブル。クエリで使っていたら、削除する。
8. View
USER_TABLES は、Oracleのデータ辞書ビューの一つで、現在のユーザーが所有するすべてのテーブルの情報を提供する。
9. その他
時にオブジェクトではないが、よくクエリで使われるので、注意が必要なもの。
擬似列(pseudocolumn)
① ROWNUM 擬似列(pseudocolumn)
Oracle
SELECT * FROM table_name WHERE ROWNUM <= 10;
Postgresql
SELECT * FROM table_name LIMIT 10;
② ROWID 擬似列(pseudocolumn)
ROWID はOracleの特有の機能。
移行対象オブジェクトの中で、間違いやすいもの、簡単説明
Function VS Procedure
Functionは計算結果を返すもので、Procedureは操作を実行して結果を返さない。
View VS Materialized view
Viewは仮想テーブルで、クエリ結果をその場で取得、Materialized Viewは生成時のデータを保存して後でリフレッシュできる。
( ・。。・ )🖐
間違っている内容がありましたら、教えて頂ければ喜びます。