OracleからPostgreSQLへ移行するにあたってSQLを書き直す必要がありました。
書き換える時に出たエラーや変更した関数をいくつかピックアップしてみます。
ERROR: subquery in FROM must have an alias
SELECT * FROM (
SELECT 1
)
これではエラーとなります
PostgreSQLでは副問合せに別名は必須ですので別名をつけましょう
SELECT * FROM (
SELECT 1
) sub
DECODE関数
PostgreSQLにある復号ではないのでCASEに書き換えます
Oracle
SELECT DECODE('判定する値', 1, '1の場合', 2, '2の場合', 'それ以外の場合') FROM DUAL
PostgreSQL
SELECT CASE '判定する値'
WHEN 1 THEN '1の場合'
WHEN 2 THEN '2の場合'
ELSE 'それ以外の場合'
END
NVL関数
NVL関数はありませんのでCOALESCE関数へ変更します
Oracle
SELECT NVL('null判定する値', 'nullだった場合の値') FROM DUAL
PostgreSQL
SELECT COALESCE('null判定する値', 'nullだった場合の値')
GREATESTとLEAST関数の挙動の差
リストの中にnullがあった場合、Oracleはnullを返しますが
PostgreSQLはnullを無視してLEASTであれば最小値の1を返します
Oracle
SELECT LEAST(1, 2, null) FROM DUAL
PostgreSQL
SELECT LEAST(1, 2, null)
リストの中にnullが入る可能性があるかどうかでSQLを書き換えます
シーケンス取得
Oracle
SELECT シーケンス名.NEXTVAL FROM DUAL
PostgreSQL
SELECT NEXTVAL('シーケンス名')
他にもありますがいくつかピックアップしてみました。