| PostgreSQL 9.4.5文書 | |||
|---|---|---|---|
| 前のページ | 上に戻る | 第 32章ラージオブジェクト | 次のページ |
SQLからラージオブジェクトを操作するのに適応したサーバ側の関数を表32-1に列挙します。
表 32-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_creat、lo_create、lo_unlink、lo_import、lo_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としてこれらの関数を呼び出さなければなりません。