ファンクションの移行

   構文や機能性の違いの他に注意するのが、SELECT文などで組み込みファンクションを使用している場合です。

   「等価な機能を持った組み込みファンクションが移行先にない」あるいは「等価なものがあるが名前が違う」などの場合には変更する必要があります。

ファンクション対応表

   Oracleの主な関数に対応する「PostgreSQLファンクション対応表」を表5に示します。各関数の引数の意味や順番は異なることがありますので、移行の際にはそれぞれのマニュアルを参照してください。

   表5を見ると、Oracleの組み込みファンクションに対して、意外に多くのPostgreSQLファンクションが対応していることがわかります。 OracleにあってPostgreSQLに存在しないのは、XMLを処理するファンクションや、さまざまな集計処理を行う分析ファンクションなどです。 そのPostgreSQLファンクション対応表を次表に示します。

単一行ファンクション

OraclePostgreSQL
ABSabs(x)
ACOSacos(x)
ASINasin(x)
ATANatan(x)
ATAN2atan2(x, y)
BITANDbitand(x, y)
CEILceil(dp or numeric)
COScos(x)
EXPexp(dp or numeric)
FLOORfloor(dp or numeric)
LNln(dp or numeric)
LOG log(dp or numeric)
MODmod(y, x)
POWERpow(a dp, b dp)
ROUND(数値) round(dp or numeric)
SIGNsign(dp or numeric)
SINsin(x)
SQRTsqrt(dp or numeric)
TANtan(x)
TRUNC(数値) trunc(dp or numeric)
表5-1:数値ファンクション

OraclePostgreSQL
CHRchr(integer)
CONCATconcat(string1, string2)
INITCAPinitcap(text)
LOWERlower(string)
LPADlpad(string text, length integer[, fill text])
LTRIMltrim(string text, characters text)
REPLACEreplace(string text, from text, to text)
RPADrpad(string text, length integer [, fill text])
RTRIMrtrim(string text, characters text)
SUBSTRsubstr(string, from [, count])
TRANSLATEtranslate(string text, from text, to text)
TRIMtrim([leading / trailing / both][characters] from string)
UPPERupper(string)
表5-2:文字値を戻す文字ファンクション

OraclePostgreSQL
ASCIIascii(text)
INSTRinstre(string1, string2)
LENGTHlength(string)
LENGTHBoctet_length(string)
表5-3:数値を戻す文字ファンクション

OraclePostgreSQL
ADD_MONTHSadd_months(date, add_number)
CURRENT_DATEcurrent_date
CURRENT_TIMESTAMPcurrent_timestamp
EXTRACT(日時)extract(field from timestamp)
LAST_DAYlast_day(date)
LOCALTIMESTAMPlocaltimestamp
MONTHS_BETWEENmonths_between(date1, date2)
NEXT_DAYnext_day(date, string)
SYSDATEcurrent_date
SYSTIMESTAMPsystimestamp
TO_TIMESTAMPto_timestamp(text, text)
TRUNC(日付)date_trunc(text, timestamp)
表5-4:日時ファンクション

OraclePostgreSQL
ASCIISTRto_ascii(text [, encoding])
BIN_TO_NUMbin_to_num(int[, ...])
CASTCAST(expression AS type)
CONVERTconvert(string text,[src_encoding name,]dest_encoding name)
TO_CHAR(日時)to_char(timestamp, text)
TO_CHAR(数値)to_char(int, text)
TO_DATEto_date(text, text)
TO_NUMBERto_number(text, text)
表5-5:変換ファンクション

OraclePostgreSQL
COALESCECOALESCE(value [, ...])
DECODEdecade(string text, type text)
GREATESTgreatest(value [, ...])
LEASTleast(value [, ...])
NULLIFNULLIF(value1, value2)
NVLCOALESCE(value [, ...])
NVL2COALESCE(value [, ...])
USER

user

表5-6:その他の単一行ファンクション

集計ファンクション


OraclePostgreSQL
AVGavg(expression)
COUNTcount(expression)
MAXmax(expression)
MINmin(expression)
STDDEVstddev(expression)
SUMsum(expression)
VARIANCEvariance(expression)
表5-7:集計ファンクション

   組み込みファンクションは、システムに埋め込まれたSQL文の中で、数多く使用されていることが考えら れます。これらをすべて変更するのは大変ですが、構文と違ってファンクションはユーザが簡単に定義できます。そのため、同名・同機能の関数を作成してしま えば、移行の手間が減ってラクになります。同じ機能で名前だけが違う関数があるなら、同名の関数を作って、その中から呼び出すようにするのがよいでしょ う。できるだけ変更の手間を減らすのが移行のコツです。

   次からは、変換に注意を要するものを見ていきましょう。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30