概要
ユーザー定義関数を実装してPostgreSQLで呼び出せるようにします。
準備
$ sudo apt install postgresql-server-dev-all
ソース
#include "postgres.h" #include "fmgr.h" PG_MODULE_MAGIC; // INT4 (整数) 用関数 PG_FUNCTION_INFO_V1(multiply_by_ten_int); Datum multiply_by_ten_int(PG_FUNCTION_ARGS) { int32 input = PG_GETARG_INT32(0); PG_RETURN_INT32(input * 10); } // FLOAT4 (単精度浮動小数点) 用関数 PG_FUNCTION_INFO_V1(multiply_by_ten_float4); Datum multiply_by_ten_float4(PG_FUNCTION_ARGS) { float4 input = PG_GETARG_FLOAT4(0); PG_RETURN_FLOAT4(input * 10.0); } // FLOAT8 (倍精度浮動小数点) 用関数 PG_FUNCTION_INFO_V1(multiply_by_ten_float8); Datum multiply_by_ten_float8(PG_FUNCTION_ARGS) { float8 input = PG_GETARG_FLOAT8(0); PG_RETURN_FLOAT8(input * 10.0); }
読み込み
CREATE OR REPLACE FUNCTION multiply_by_ten(input int) RETURNS int AS '/usr/lib/postgresql/echo', 'multiply_by_ten_int' LANGUAGE C STRICT; CREATE OR REPLACE FUNCTION multiply_by_ten(input real) RETURNS real AS '/usr/lib/postgresql/echo', 'multiply_by_ten_float4' LANGUAGE C STRICT; CREATE OR REPLACE FUNCTION multiply_by_ten(input double precision) RETURNS double precision AS '/usr/lib/postgresql/echo', 'multiply_by_ten_float8' LANGUAGE C STRICT;
これで受け取った数値を10倍して返すだけのユーザー定義関数の実装ができた。