関数呼び出しによって参照される特定の関数は、以下の手順に従って解決されます。関数における型の解決pg_procシステムカタログから、調査の対象とする関数を選択します。スキーマ検索パスを参照してください)。修飾された関数名が与えられている場合、指定されたスキーマの関数のみが調査対象とみなされます。検索パスで、引数のデータ型が同じである複数の関数を検出した場合、そのパスで最初に検出された関数のみを調査対象とみなします。引数のデータ型が異なる関数は、検索パス内の位置に関係なく、同じように調べられます。関数がVARIADIC型の配列パラメータを伴って定義されており、そしてVARIADICキーワードを用いずに呼ばれた場合は、呼び出しに適合するよう、一つかそれ以上の要素の型に配列のパラメータを置き換えた形で扱われます。このような拡張後は、その関数は実際の引数の型を持つので、他の非可変長の引数を持つ関数と同一になるかもしれません。この場合、検索パスで先に見つかった関数が使われます。同じスキーマに2つの関数が見つかった場合は非可変長の関数が優先されます。パラメータにデフォルト値を持つ関数は、デフォルト指定可能なパラメータ位置のうち、0以上が省略されたどのような呼び出しに対しても適合すると見なされます。呼び出し時にこのような関数が2つ以上適合した場合、検索パスで先に見つかったものが使用されます。call」エラーが結果として返るでしょう。正確に入力引数型を受け付ける関数があるかどうか検査します。(unknownを含む場合は、この段階で一致するものは決して見つかりません)。正確に一致するものが存在しなかった場合、その関数呼び出しが特別な型変換要求であるかどうかを確認します。これは、関数呼び出しがただ1つの引数を取り、関数名が何らかのデータ型の(内部的な)名前と同一である場合に発生します。その関数の引数は、unknown型のリテラルか指定されたデータ型へのバイナリ変換可能な型か、型の入出力関数を適用することで指定された型に変換可能な型(つまり、変換が標準文字列型との間の変換である)であるかのいずれかでなければなりません。これらの条件に合う場合、関数呼び出しはCAST仕様の形式と同様に扱われます。[8]最適なものを検索します。関数の候補のうち、入力値のデータ型が一致せず、また、(暗黙的な変換を使用して)一致するように変換できないものを破棄します。unknownリテラルは、上記の目的で何にでも変換可能とみなされます。1つの候補しか残らない場合、それを使います。それ以外の場合は次の段階に進みます。入力引数のいずれかがドメイン型であれば、以降の段階すべてでドメインの基本型であるかのように扱います。これにより、曖昧な関数を解決するのを目的としてその基本型であるかのようにドメインが振る舞うことが確実になります。全ての候補を検索し、入力型に最も正確に合うものを残します。正確に合うものが何もなければ全ての候補を残します。1つの候補しか残らない場合、それを使います。それ以外の場合は次の段階に進みます。全ての候補を検索し、型変換が必要とされるところで(入力データ型カテゴリの)優先される型を受け付けるものを残します。優先される型を受け付けるものが何もなければ全ての候補を残します。1つの候補しか残らない場合、それを使います。それ以外の場合は次の段階に進みます。入力引数でunknownのものがあった場合、それらの残った候補に引数位置で受け入れられる型カテゴリを検査します。型のリテラルは文字列のようなものですので、この文字列への重み付けは適切です)。なければ、もし残った全ての候補が同じ型カテゴリを受け入れる場合はそのカテゴリを選択します。なければ、さらに手掛かりがなければ正しい選択が演繹されることができませんので、失敗となります。ここで、選択された型カテゴリを受け付けない演算子候補は破棄されます。このカテゴリ内の優先される型を受け付ける候補が1つでもある場合、その引数の優先されない型を受け付ける候補は破棄されます。これらの検査をどれも通らなかったら全ての候補を残します。1つの候補しか残らない場合、それを使います。それ以外の場合は次の段階に進みます。どの候補がunknown引数の位置にある型を受け付けることができるかを検査します。正確に1つの候補がこの検査を通過した場合、それを使います。それ以外は失敗します。この「最善一致」規則は演算子と関数の型解決で同一であることに注意してください。第1引数としてnumeric型、第2引数としてinteger型を取ります。以下の問い合わせは自動的に、integer型の第1引数をnumericに変換します。row)問い合わせはパーサによって実質以下のように変形されます。4);小数点を持つ数値定数はまずnumericに割り当てられますので、以下の問い合わせでは型変換が不要です。そのためかなり効率的になる可能性があります。部分文字列関数の型解決substr関数は複数存在します。その1つはtextとinteger型を取ります。型の指定がない文字列定数で呼び出した場合、システムは優先されるカテゴリstring(すなわちtext型)の引数を受け付ける候補関数を選択します。row)文字列がvarchar型と宣言された場合、これはテーブルから取り出した場合が考えられますが、パーサはそれをtextになるように変換しようと試みます。row)これは以下になるようにパーサによって変換されます。3);注記パーサはpg_castカタログからtextとvarcharがバイナリ互換、つまり、何らかの物理的な変換を行うことなく片方を受け付ける関数にもう片方を渡すことができることを学習します。したがって、この場合実際に挿入される型変換呼び出しはありません。integer型の引数でこの関数が呼び出された場合、パーサはそれをtextに変換しようと試みます。casts.integerはtextへの暗黙的なキャストを持たないため、これは失敗します。成功させるには、以下のように明示的なキャストを行います。この処理の理由は、実際にはキャスト関数が存在しない状況において、関数形態のキャスト仕様をサポートすることです。キャスト関数が存在する場合、慣習的に出力型に因んで名付けられます。特殊な状況を持つ必要はありません。CASTを参照してください。