関数と演算子
本章では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
- 整数型の比較演算子。
INT
はint1,int2,int4,int8
のいずれかで、左辺と右辺が異なる整数型であっても構いません。COMP
は=,<>,<,<=,>=,>
のいずれかです。} FP COMP FP
- 浮動小数点型の比較演算子。
FP
はfloat2,float4,float8
のいずれかで、左辺と右辺が異なる浮動小数点型であっても構いません。COMP
は=,<>,<,<=,>=,>
のいずれかです。} numeric COMP numeric
- 実数型の比較演算子。
COMP
は=,<>,<,<=,>=,>
のいずれかです。} INT OP INT
- 整数型の算術演算子。
INT
はint1,int2,int4,int8
のいずれかで、左辺と右辺が異なる整数型であっても構いません。OP
は+,-,*,/
のいずれかです。} FP OP FP
- 浮動小数点型の算術演算子。
FP
はfloat2,float4,float8
のいずれかで、左辺と右辺が異なる浮動小数点型であっても構いません。COMP
は+,-,*,/
のいずれかです。} numeric OP numeric
- 実数型の比較演算子。
OP
は+,-,*,/
のいずれかです。} INT % INT
- 剰余演算子。
INT
はint1,int2,int4,int8
のいずれかです。} INT & INT
- 論理積演算子。
INT
はint1,int2,int4,int8
のいずれかです。} INT | INT
- 論理和演算子。
INT
はint1,int2,int4,int8
のいずれかです。} INT # INT
- 排他的論理和演算子。
INT
はint1,int2,int4,int8
のいずれかです。} ~ INT
- 論理否定演算子。
INT
はint1,int2,int4,int8
のいずれかです。} INT >> int4
- 右シフト演算子。
INT
はint1,int2,int4,int8
のいずれかです。} INT << int4
- 左シフト演算子。
INT
はint1,int2,int4,int8
のいずれかです。} + TYPE
- 単項プラス演算子。
TYPE
はint1,int2,int4,int8,float2,float4,float8,numeric
のいずれかです。} - TYPE
- 単項マイナス演算子。
TYPE
はint1,int2,int4,int8,float2,float4,float8,numeric
のいずれかです。} @ TYPE
- 絶対値。
TYPE
はint1,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
date
とtime
からtimestamp
を生成します}date + timetz
date
とtimetz
からtimestamptz
を生成します}time - time
time
型同士の差分}timestamp - timestamp
timestamp
型同士の差分}timetz + interval
timetz - interval
timetz
とinterval
を加算、または減算します。}timestamptz + interval
timestamptz - interval
timestamptz
とinterval
を加算、または減算します。}overlaps(TYPE,TYPE,TYPE,TYPE)
- 2つの時間間隔が重なるかどうかを判定します。
TYPE
はtime,timetz,timestamp,timestamptz
のいずれか一つです。} extract(text FROM TYPE)
day
やhour
など日付時刻型の部分フィールドの抽出。TYPE
はtime,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)
- ネットワークアドレスのネットマスク長を設定する。
NETADDR
はinet
かcidr
のどちらか。} inet_merge(inet,inet)
- 両方のネットワークを含む最小のネットワークを返す}
通貨型演算子
money COMP money
- 比較演算子。
COMP
は=,<>,<,<=,>=,>
のいずれかです。} money OP money
- 算術演算子。
OP
は+,-,/
のいずれかです。} money * TYPE
TYPE * money
- 通貨型と数値型の乗算。
TYPE
はint1,int2,int4,float2,float4,float8
のいずれかです。} money / TYPE
- 通貨型の数値型による除算。
TYPE
はint1,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
TYPE
がint2,int4,int8,float4,float8,numeric
のいずれかである場合、KEY
で指定されたJSONオブジェクトフィールドを数値型として取得する。下記の補足も参照。}(jsonb ->> NUM)::TYPE
TYPE
がint2,int4,int8,float4,float8,numeric
のいずれかである場合、インデックス番号NUM
で指定されたJSONオブジェクトフィールドを数値型として取得する。下記の補足も参照。}jsonb ? KEY
- jsonbオブジェクトが指定された
KEY
を含むかどうかをチェックする}
Note
jsonb ->> KEY
演算子によって取り出した数値データをfloat
やnumeric
など数値型に変換する時、通常、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次座標の値を返します。