これは、UNIX/LINUX & PostgreSQL の C 言語です
履歴
ver0.1 : 最初のバージョン (2004/06/24)
ver0.2 : 最初のバージョン (2005/04/09) 名前を変えただけ...
はじめに
PostgreSQL では、C言語で作った関数を SQL から呼び出す事ができるそうです。
そのような関数というか、ライブラリを共有ライブラリというそうです。
実際にある規約にのっとってコンパイル/リンクすれば、簡単に作れます。
作った関数は、以下のように、CREATE FUNCTION で、関数定義をすれば、SQL 内で拡張関数として呼び出す事ができます。
CREATE FUNCTION 関数名(引数) RETURNS 戻り値の型 AS 'ライブラリのファイルパス','ライブラリ内部の(C言語上での)関数名' LANGUAGE C STRICT;
という事で、外部コマンドが呼び出せたら、便利だろうと思って、外部コマンド実行ができるライブラリを作ってみた。
MS-SQL Server でいうところの master..xp_cmdshell と同じやつです。
ソースの説明
system() 関数呼び出しているだけなので、省略
実行環境
PostgreSQL のライブラリがある。
postgres.h など
使い方
同梱の make.csh でコンパイルすると pgOScmd.so というライブラリができているはず。
私の場合
c.h
fmgr.h
pg_config.h
pg_config_manual.h
pg_config_os.h
port.h
postgres.h
postgres_ext.h
utils/elog.h
utils/errcodes.h
utils/palloc.h
これを、適当な(PostgreSQL のプロセス権限でもアクセスできる)ディレクトリへコピー。
後は、SQL 文の実行時に
CREATE FUNCTION systemExec(text) RETURNS integer AS 'ライブラリのパス','systemExec' LANGUAGE C STRICT;
とすれば(ファイルパスは絶対パスが無難)、SQL 文で
SELECT systemExec('/bin/pwd > /tmp/aaa.txt');
などで実行されているかなぁ〜
PostgreSQL のメモは
こちら
使用上の注意
当然ですが、システム開発で便利なんですけど、いかなる不法行為に悪用することは厳禁とします。
セキュリティ
C 言語のライブラリ(本ソフトウェアも含)は、コンパイル済でなければならないので、これを不正行為者に埋め込まれる事はないでしょう。
というか、埋め込まれた時点でファイル転送されているので、このライブラリの性格がどうのこうの言う前にアウトです。
というかこんなモジュールなんていらない方法はあるんですけど、内緒です。
ですので、このモジュール自身が危険ってわけではないです。
免責など
著作権は放棄します。
このソフトを使用したことによって生じた、
いかなる損害についても責任は持ちません。
ソースコードについても、各自の責任において、
自由にいじってくれてもいいです。
to do list
出力結果(標準出力)が欲しい
tar.gz 形式の方が格好いいよなぁ....UNIX/Linux 系ソフトだし...
DownLoad
(pgOScmd.lzh as 3,211byte) (
pgOScmd.lzh.base64
)
mail to active@window.goukaku.com