★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

34.4. サーバ側の関数

SQLからラージオブジェクトを操作するのに適応したサーバ側の関数を表 34.1に列挙します。

表34.1 SQL向けラージオブジェクト関数

関数戻り値の型説明結果
lo_from_bytea(loid oid, string bytea) oidラージオブジェクトを作成してそこにデータを格納し、そのOIDを返す。 システムにOIDを選ばせるには0を渡す。 lo_from_bytea(0, E'\\xffffff00')24528
lo_put(loid oid, offset bigint, str bytea) void与えられたオフセットにデータを書き込む。 lo_put(24528, 1, E'\\xaa') 
lo_get(loid oid [, from bigint, for int]) byteaそこから内容または部分文字列を取り出す。 lo_get(24528, 0, 3)\xffaaff

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

CREATE TABLE image (
    name            text,
    raster          oid
);

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

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

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つの関数はサーバのファイルシステム上のファイルの読み書きを、データベースを所有するユーザの権限で行います。 したがって、これらの使用はスーパーユーザに限定されています。 対照的に、クライアント側のインポート関数とエクスポート関数はクライアントのファイルシステム上のファイルをクライアントプログラムの権限で読み書きします。 このクライアント側の関数はスーパーユーザ権限を必要としません。

またlo_readおよびlo_writeの機能はサーバサイドの呼び出しを介しても利用することができます。 しかしサーバサイドの関数名はクライアント側のインタフェースとは異なり、アンダースコアが含まれません。 loreadおよびlowriteとしてこれらの関数を呼び出さなければなりません。