関数と演算子

本章ではGPUデバイス上で実行可能な関数と演算子について説明します。

型キャスト

  • bool <-- int4
  • int1 <-- int2, int4, int8, float2, float4, float8, numeric
  • int2 <-- int1, int4, int8, float2, float4, float8, numeric
  • int4 <-- bool, int1, int2, int8, float2, float4, float8, numeric
  • int8 <-- int1, int2, int4, float2, float4, float8, numeric
  • float2 <-- int1, int2, int4, int8, float4, float8, numeric
  • float4 <-- int1, int2, int4, int8, float2, float8, numeric
  • float8 <-- int1, int2, int4, int8, float2, float4, numeric
  • numeric <-- int1, int2, int4, int8, float2, float4, float8
  • money <-- int4, int8, numeric
  • date <-- timestamp, timestamptz
  • time <-- timetz, timestamp, timestamptz
  • timetz <-- time, timestamptz
  • timestamp <-- date, timestamptz
  • timestamptz <-- date, timestamp

数値型演算子

bool COMP bool
論理値型の比較演算子。COMP=,<>のいずれかです。
INT COMP INT
整数型の比較演算子。
INTint1,int2,int4,int8のいずれかで、左辺と右辺が異なる整数型であっても構いません。
COMP=,<>,<,<=,>=,>のいずれかです。
FP COMP FP
浮動小数点型の比較演算子。
FPfloat2,float4,float8のいずれかで、左辺と右辺が異なる浮動小数点型であっても構いません。
COMP=,<>,<,<=,>=,>のいずれかです。
numeric COMP numeric
実数型の比較演算子。
COMP=,<>,<,<=,>=,>のいずれかです。
INT OP INT
整数型の算術演算子。
INTint1,int2,int4,int8のいずれかで、左辺と右辺が異なる整数型であっても構いません。
OP+,-,*,/のいずれかです。
FP OP FP
浮動小数点型の算術演算子。
FPfloat2,float4,float8のいずれかで、左辺と右辺が異なる浮動小数点型であっても構いません。
COMP+,-,*,/のいずれかです。
numeric OP numeric
実数型の比較演算子。
OP+,-,*,/のいずれかです。
INT % INT
剰余演算子。INTint1,int2,int4,int8のいずれかです。
INT & INT
論理積演算子。INTint1,int2,int4,int8のいずれかです。
INT | INT
論理和演算子。INTint1,int2,int4,int8のいずれかです。
INT # INT
排他的論理和演算子。INTint1,int2,int4,int8のいずれかです。
~ INT
論理否定演算子。INTint1,int2,int4,int8のいずれかです。
INT >> int4
右シフト演算子。INTint1,int2,int4,int8のいずれかです。
INT << int4
左シフト演算子。INTint1,int2,int4,int8のいずれかです。
+ TYPE
単項プラス演算子。TYPEint1,int2,int4,int8,float2,float4,float8,numericのいずれかです。
- TYPE
単項マイナス演算子。TYPEint1,int2,int4,int8,float2,float4,float8,numericのいずれかです。
@ TYPE
絶対値。TYPEint1,int2,int4,int8,float2,float4,float8,numericのいずれかです。

数学関数

float8 cbrt(float8)
float8 dcbrt(float8)
cube root|
float8 ceil(float8)
float8 ceiling(float8)
nearest integer greater than or equal to argument
float8 exp(float8)
float8 dexp(float8)
exponential
float8 floor(float8)
nearest integer less than or equal to argument
float8 ln(float8)
float8 dlog1(float8)
natural logarithm
float8 log(float8)
float8 dlog10(float8)
base 10 logarithm
float8 pi()
circumference ratio
float8 power(float8,float8)
float8 pow(float8,float8)
float8 dpow(float8,float8)
power
float8 round(float8)
float8 dround(float8)
round to the nearest integer
float8 sign(float8)
sign of the argument
float8 sqrt(float8)
float8 dsqrt(float8)
square root|
float8 trunc(float8)
float8 dtrunc(float8)
truncate toward zero|

三角関数

float8 degrees(float8)
ラジアンに対応する度
float8 radians(float8)
度に対応するラジアン
float8 acos(float8)
逆余弦関数
float8 asin(float8)
逆正弦関数
float8 atan(float8)
逆正接関数
float8 atan2(float8,float8)
arg1 / arg2の逆正接関数
float8 cos(float8)
余弦関数
float8 cot(float8)
余接関数
float8 sin(float8)
正弦関数
float8 tan(float8)
正接関数

日付/時刻型演算子

date COMP date
date型同士の比較演算子。COMP=,<>,<,<=,>=,>のいずれか。
date COMP timestamp
timestamp COMP date
date型とtimestamp型の比較演算子。COMP=,<>,<,<=,>=,>のいずれか。
date COMP timestamptz
timestamptz COMP date
date型とtimestamptz型の比較演算子。COMP=,<>,<,<=,>=,>のいずれか。
time COMP time
time型同士の比較演算子。COMP=,<>,<,<=,>=,>のいずれか。
timetz COMP timetz
timetz型同士の比較演算子。COMP=,<>,<,<=,>=,>のいずれか。
timestamp COMP timestamp
timestamp型同士の比較演算子。COMP=,<>,<,<=,>=,>のいずれか。
timestamptz COMP timestamptz
timestamptz型同士の比較演算子。COMP=,<>,<,<=,>=,>のいずれか。
timestamp COMP timestamptz
timestamptz COMP timestamp
timestamp型とtimestamptz型の比較演算子。COMP=,<>,<,<=,>=,>のいずれか。
interval COMP interval
interval型同士の比較演算子。COMP=,<>,<,<=,>=,>のいずれか。
date + int4
int4 + date
date型の加算演算子
date - int4
date型の減算演算子
date - date
date型同士の差分
date + time
time + date
datetimeからtimestampを生成します
date + timetz
datetimetzからtimestamptzを生成します
time - time
time型同士の差分
timestamp - timestamp
timestamp型同士の差分
timetz + interval
timetz - interval
timetzintervalを加算、または減算します。
timestamptz + interval
timestamptz - interval
timestamptzintervalを加算、または減算します。
overlaps(TYPE,TYPE,TYPE,TYPE)
2つの時間間隔が重なるかどうかを判定します。
TYPEtime,timetz,timestamp,timestamptzのいずれか一つです。
extract(text FROM TYPE)
dayhourなど日付時刻型の部分フィールドの抽出。
TYPEtime,timetz,timestamp,timestamptz,intervalのいずれか一つです。
now()
トランザクションの現在時刻
- interval
interval型の単項マイナス演算子
interval + interval
interval型の加算演算子
interval - interval
interval型の減算演算子

文字列関数/演算子

{text,bpchar} COMP {text,bpchar}
比較演算子。COMP=,<>,<,<=,>=,>のいずれかです。
なお、<,<=,>=,>演算子はロケール設定がUTF-8またはC(ロケール設定なし)の場合にのみ有効です。
varchar || varchar
文字列結合
結果文字列の最大長を予測可能とするため、両辺はvarchar(n)でなければいけません。
substring(text,int4)
substring(text,int4,int4)
substr(text,int4)
substr(text,int4,int4)
部分文字列の切り出し
length({text,bpchar})
文字列長
{text,bpchar} [NOT] LIKE text
LIKE表現を用いたパターンマッチング
{text,bpchar} [NOT] ILIKE text
LIKE表現を用いた大文字小文字を区別しないパターンマッチング。
なお、ILIKE演算子はロケール設定がUTF-8またはC(ロケール設定なし)の場合にのみ有効です。

ネットワーク関数/演算子

macaddr COMP macaddr
比較演算子。COMP=,<>,<,<=,>=,>のいずれかです。
macaddr & macaddr
ビット積演算子
macaddr | macaddr
ビット和演算子
~ macaddr
ビット否定演算子
trunc(macaddr)
末尾の3バイトをゼロに設定する
inet COMP inet
比較演算子。COMP=,<>,<,<=,>=,>のいずれかです。
inet << inet
左辺は右辺に内包される。
inet <<= inet
左辺は右辺に内包されるか等しい。
inet >> inet
左辺は右辺を内包する。
inet >>= inet
左辺は右辺を内包するか等しい。
inet && inet
左辺は右辺を内包するか内包される
~ inet
ビット否定演算子
inet & inet
ビット積演算子
inet | inet
ビット和演算子
inet + int8
加算演算子
inet - int8
減算演算子
inet - inet
減算演算子
broadcast(inet)
ネットワークアドレスのブロードキャストアドレスを返す
family(inet)
ネットワークアドレスのアドレスファミリを返す。IPv4の場合は4、IPv6の場合は6
hostmask(inet)
ネットワークアドレスのホストマスクを返す
masklen(inet)
ネットワークアドレスのマスク長を返す
netmask(inet)
ネットワークアドレスのネットマスクを返す
network(inet)
ネットワークアドレスのネットワーク部を返す
set_masklen(NETADDR,int)
ネットワークアドレスのネットマスク長を設定する。NETADDRinetcidrのどちらか。
inet_merge(inet,inet)
両方のネットワークを含む最小のネットワークを返す

通貨型演算子

money COMP money
比較演算子。COMP=,<>,<,<=,>=,>のいずれかです。
money OP money
算術演算子。OP+,-,/のいずれかです。
money * TYPE
TYPE * money
通貨型と数値型の乗算。TYPEint1,int2,int4,float2,float4,float8のいずれかです。
money / TYPE
通貨型の数値型による除算。TYPEint1,int2,int4,float2,float4,float8のいずれかです。
money / money
通貨型同士の除算。

uuid型演算子

uuid COMP uuid
比較演算子。COMP=,<>,<,<=,>=,>のいずれかです。

JSONB型演算子

jsonb -> KEY
KEYで指定されたJSONオブジェクトフィールドを取得する
jsonb -> NUM
インデックス番号NUMで指定されたJSONオブジェクトフィールドを取得する
jsonb ->> KEY
KEYで指定されたJSONオブジェクトフィールドをテキスト値として取得する
jsonb ->> NUM
インデックス番号NUMで指定されたJSONオブジェクトフィールドをテキスト値として取得する
(jsonb ->> KEY)::TYPE
TYPEint2,int4,int8,float4,float8,numericのいずれかである場合、KEYで指定されたJSONオブジェクトフィールドを数値型として取得する。下記の補足も参照。
(jsonb ->> NUM)::TYPE
TYPEint2,int4,int8,float4,float8,numericのいずれかである場合、インデックス番号NUMで指定されたJSONオブジェクトフィールドを数値型として取得する。下記の補足も参照。
jsonb ? KEY
jsonbオブジェクトが指定されたKEYを含むかどうかをチェックする

Note

jsonb ->> KEY演算子によって取り出した数値データをfloatnumericなど数値型に変換する時、通常、PostgreSQLはjsonb内部表現をテキストとして出力し、それを数値表現に変換するという2ステップの処理を行います。 PG-Stromはjsonb ->> KEY演算子による参照とテキスト⇒数値表現へのキャストが連続している時、jsonbオブジェクトから数値表現を取り出すための特別なデバイス関数を使用する事で最適化を行います。

範囲型演算子

Note

以下の説明において、RANGEは任意の{int4rangeint8rangetsrangetstzrangedaterange}です。
以下の説明において、TYPEは同時に使われているRANGEの要素型です。

RANGE = RANGE
両辺が等しい
RANGE <> RANGE
両辺が等しくない
RANGE < RANGE
左辺は右辺より小さい
RANGE <= RANGE
左辺は右辺より小さいか等しい
RANGE > RANGE
左辺は右辺より大きい
RANGE >= RANGE
左辺は右辺より大きいか等しい
RANGE @ RANGE
左辺の範囲は右辺の範囲を包含する
RANGE @ TYPE
左辺の範囲は右辺の要素を包含する
RANGE <@ RANGE
左辺の範囲は右辺の範囲に包含される
TYPE <@ RANGE
左辺の要素は右辺の範囲に包含される
RANGE && RANGE
左辺と右辺は重複する(共通点を持つ)
RANGE << RANGE
左辺は厳密に右辺よりも小さい
RANGE >> RANGE
左辺は厳密に右辺よりも大きい
RANGE &< RANGE
左辺のいかなる点も右辺の範囲を越えない
RANGE &> RANGE
右辺のいかなる点も左辺の範囲を越えない
RANGE -|- RANGE
左辺と右辺は隣接している
RANGE + RANGE
左辺と右辺による結合範囲を返す
RANGE * RANGE
左辺と右辺による交差範囲を返す
RANGE - RANGE
左辺と右辺による差分範囲を返す
lower(RANGE)
範囲の下限を返す
upper(RANGE)
範囲の上限を返す
isempty(RANGE)
空の範囲かどうかをチェックする
lower_inc(RANGE)
下限は内包されているかどうかをチェックする
upper_inc(RANGE)
上限は内包されているかをチェックする
lower_inf(RANGE)
下限は無限大かどうかをチェックする
upper_inf(RANGE)
上限は無限大かどうかをチェックする
range_merge(RANGE,RANGE)
両方の範囲を含む最小の範囲を返す

PostGIS関数

geometry st_makepoint(float8,float8)
geometry st_point(float8,float8)
2次元座標を含むPOINT型ジオメトリを返す
geometry st_makepoint(float8,float8,float8)
3次元座標を含むPOINT型ジオメトリを返す
geometry st_makepoint(float8,float8,float8,float8)
ZM座標を含むPOINT型ジオメトリを返す
geometry st_setsrid(geometry,int4)
ジオメトリにSRIDを設定する
float8 st_distance(geometry,geometry)
ジオメトリ間の距離をfloat8で返す
bool st_dwithin(geometry,geometry,float8)
ジオメトリ間の距離が指定値以内なら真を返す。st_distanceと比較演算子の組み合わせよりも高速な場合がある。
text st_relate(geometry,geometry)
ジオメトリ間の交差状態を判定し、DE9-IM(Dimensionally Extended Nine-Intersection Matrix)書式を返す。
bool st_contains(geometry,geometry)
ジオメトリ1がジオメトリ2を包含する時、真を返す。
bool st_crosses(geometry,geometry)
ジオメトリ同士が空間的に交差する時、真を返す。
int4 st_linecrossingdirection(geometry,geometry)
2つのLINESTRING型ジオメトリがどのように交差するか(しないか)を返す。