これは、UNIX/LINUX & PostgreSQL の C 言語です


履歴



はじめに
PostgreSQL では、C言語で作った関数を SQL から呼び出す事ができるそうです。

そのような関数というか、ライブラリを共有ライブラリというそうです。

実際にある規約にのっとってコンパイル/リンクすれば、簡単に作れます。

作った関数は、以下のように、CREATE FUNCTION で、関数定義をすれば、SQL 内で拡張関数として呼び出す事ができます。
CREATE FUNCTION 関数名(引数) RETURNS 戻り値の型 AS 'ライブラリのファイルパス','ライブラリ内部の(C言語上での)関数名' LANGUAGE C STRICT;


という事で、外部コマンドが呼び出せたら、便利だろうと思って、外部コマンド実行ができるライブラリを作ってみた。

MS-SQL Server でいうところの master..xp_cmdshell と同じやつです。


ソースの説明
system() 関数呼び出しているだけなので、省略


実行環境



使い方
同梱の make.csh でコンパイルすると pgOScmd.so というライブラリができているはず。

私の場合

これを、適当な(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



DownLoad(pgOScmd.lzh as 3,211byte) (pgOScmd.lzh.base64)

mail to active@window.goukaku.com