0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OracleからPostgresqlに簡単メモ

Posted at

Oracleの移行対象オブジェクトの例

  1. Function
  2. Index
  3. Materialized view
  4. Procedure
  5. Sequence
  6. Synonym
  7. Table
  8. View
  9. その他

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は生成時のデータを保存して後でリフレッシュできる。

( ・。。・ )🖐

間違っている内容がありましたら、教えて頂ければ喜びます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?