Server Programming Interface

PostgreSQL拡張機能の開発について、わかりやすい解説が下記にありましたので、参考にさせていたたぎ、自環境で試してみました。

「SPIインタフェースでPostgreSQLにアクセス」
https://qiita.com/seinoyu/items/5f31a871261f84f273e9

環境) PostgreSQL 14.6 / Ubuntu 22.04
開発に必要なパッケージ下記コマンドでインストールします。

sudo apt install postgresql postgresql-contrib postgresql-server-dev-all

テーブル準備

CREATE TABLE spitest01_tbl(col1 integer, col2 integer);

spitest01.c

Makefile

MODULE_big = spitest01
OBJS = spitest01.o

PGXS := $(shell pg_config –pgxs)
include $(PGXS)

pg_configにはパスはすでに通っているものとして、(/usr/bin/pg_config)

make
sudo make install

でビルド、インストールします。

pgxsは下記をさしています。

pg_config –pgxs
/usr/lib/postgresql/14/lib/pgxs/src/makefiles/pgxs.mk

soは下記にインストールされました。
/usr/lib/postgresql/14/lib/spitest01.so

呼び出し

postgres=# CREATE PROCEDURE spitest01() AS ‘$libdir/spitest01’, ‘spitest01’ LANGUAGE C;
CREATE PROCEDURE
postgres=# call spitest01();
CALL
postgres=# select * from spitest01_tbl;
col1 | col2
——+——
10 | 11
30 | 31
(2 rows)

ログ確認

tail -f /var/log/postgresql/postgresql-14-main.log

2023-01-29 05:55:44.612 UTC [12779] postgres@postgres LOG: [col1=10][col2=11]
2023-01-29 05:55:44.612 UTC [12779] postgres@postgres STATEMENT: call spitest01();
2023-01-29 05:55:44.612 UTC [12779] postgres@postgres LOG: [col1=30][col2=31]
2023-01-29 05:55:44.612 UTC [12779] postgres@postgres STATEMENT: call spitest01();

INSERTを3回やりますが、2回目をロールバックして、正常に書き込まれているかの確認です。

以前からDBサーバの拡張機能の開発に興味がありましたが、まずはここまで簡単にその手順の確認でした。
これをベースにまた発展させていきたいと思います。