Postgres にて使用可能な組み込み演 算子について説明します。
Postgres はシステム型に対して多くの 組み込み演算子を提供しています。これらの演算子はシステムカタロ グ pg_operator で定義されています。pg_operator の各エントリは、 演算子を実装したプロシージャ名と入出力の型に関する OIDs クラスを含んでいます。
文字列連結演算子 "||" の全種類を表示したい場合は、以下 を入力します。
SELECT oprleft, oprright, oprresult, oprcode
FROM pg_operator WHERE oprname = '||';
oprleft|oprright|oprresult|oprcode
-------+--------+---------+-------
25| 25| 25|textcat
1042| 1042| 1042|textcat
1043| 1043| 1043|textcat
(3 rows)
ユーザは次のように演算子名を使って演算子を使用することもでき ます。
select * from emp where salary < 40000;他にも、ユーザは演算子を実装した関数を直接呼び出すこともでき ます。この場合、上の問い合わせは次のように表すことになります。
select * from emp where int4lt(salary, 40000);
psql には、演算子を表示するコマンド ( \dd )があります。 (訳注: \do コマンドの間違いです。)
演算子には優先順位があります。現在それはパーサのコードに直接記 述されています。ほとんどの演算子は同じ優先順位を持ち、左から評 価されていきます。この優先順位が原因で、思いがけない振舞いをする ことがあります。例えば、ブール演算子 "<" と ">" という組は、 ブール演算子 "<=" と ">=" の組が持つ優先順位と異なる優先順 位を持っています。
Table 4-1. 演算子の順序(優先順位の高い順)
| 要素 | 優先順位 | 説明 |
|---|---|---|
| UNION | 左 | SQL select を構築する |
| :: | Postgres における型キャスト | |
| [ ] | 左 | 配列の区切り文字 |
| . | 左 | テーブル/カラムの区切り文字 |
| - | 右 | 単項負数 |
| ; | 左 | 文の終端、対数 |
| : | 右 | 指数 |
| | | 左 | 間隔の開始点 |
| 左 | 乗算、除算 | |
| + - | 左 | 加算、減算 |
| IS | TRUE、FALSE、NULL かどうかを試験する。 | |
| ISNULL | NULL かどうかを試験する。 | |
| NOTNULL | 非 NULL かどうかを試験する。 | |
| (その他全ての演算子) | 固有、ユーザ定義 | |
| IN | メンバーシップの設定 | |
| BETWEEN | 含有 | |
| LIKE | 文字列パターンの一致 | |
| < > | 等しくない(ブール値) | |
| = | 右 | 等しい |
| NOT | 右 | 否定 |
| AND | 左 | 論理積 |
| OR | 左 | 論理和 |