関数と演算子

本章では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)
立方根
float8 ceil(float8)
float8 ceiling(float8)
引数より大きいか等しく、引数に最も近い整数
float8 exp(float8)
float8 dexp(float8)
指数(eを底とする指定のべき乗)
float8 floor(float8)
引数より小さいか等しく、引数に最も近い整数
float8 ln(float8)
float8 dlog1(float8)
自然対数
float8 log(float8)
float8 dlog10(float8)
10を底とした対数
float8 pi()
円周率
float8 power(float8,float8)
float8 pow(float8,float8)
float8 dpow(float8,float8)
べき乗
float8 round(float8)
float8 dround(float8)
最も近い整数への丸め
float8 sign(float8)
符号
float8 sqrt(float8)
float8 dsqrt(float8)
平方根
float8 trunc(float8)
float8 dtrunc(float8)
整数への切捨て

三角関数

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(ロケール設定なし)の場合にのみ有効です。}
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オブジェクトから数値表現を取り出すための特別なデバイス関数を使用する事で最適化を行います。

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型ジオメトリがどのように交差するか(しないか)を返す。

CUBE型関数

cube COMP cube
比較演算子。COMP=,<>,<,<=,>=,>のいずれかです。}
bool cube_contains(cube, cube)
第一引数の立体が第二引数の立体を包含している時、真を返す。
bool cube_contained(cube, cube)
第一引数の立体が第二引数の立体に包含されている時、真を返す。
float8 cube_ll_coord(cube, int4)
立体の左下隅のn次座標の値を返します。