32.4. サーバ側の関数

これまで説明したクライアント側の関数それぞれに対応する、SQLから呼び出し可能なサーバ側の関数があります。 実際、ほとんどのクライアント側の関数は対応するサーバ側の関数に対する単なるインタフェースです。 SQLコマンドからの呼び出しが実際に有用な関数は、lo_creatlo_createlo_unlinklo_importlo_exportです。 これらの使用例を示します。

CREATE TABLE image (
    name            text,
    raster          oid
);

SELECT lo_creat(-1);       -- 新しい空のラージオブジェクトのOIDを返します

SELECT lo_create(43213);   -- OID43213でラージオブジェクトの生成を試行します

SELECT lo_unlink(173454);  -- OID 173454のラージオブジェクトを削除します

INSERT INTO image (name, raster)
    VALUES ('beautiful image', lo_import('/etc/motd'));

INSERT INTO image (name, raster)  -- 上と同じですが使用するOIDを指定します
    VALUES ('beautiful image', lo_import('/etc/motd', 68583));

SELECT lo_export(image.raster, '/tmp/motd') FROM image
    WHERE name = 'beautiful image';

サーバ側のlo_importおよびlo_export関数の動作はクライアント側の関数とかなり異なります。 この2つの関数はサーバのファイルシステム上のファイルの読み書きを、データベースを所有するユーザの権限で行います。 したがって、これらの使用はスーパーユーザに限定されています。 対照的に、クライアント側のインポート関数とエクスポート関数はクライアントのファイルシステム上のファイルをクライアントプログラムの権限で読み書きします。 このクライアント側の関数はスーパーユーザ権限を必要としません。