クライアントインタフェース

PostgreSQL 8.0.0 文書
前のページ | 巻戻し | 第 28章ラージオブジェクト | 早送り | 次のページ

# 28.3. クライアントインタフェース

本節では、PostgreSQLクライアントインタフェースライブラリで提供されるラージオブジェクトへのアクセス手段について説明します。 これらの関数を使用したラージオブジェクトの操作は全てSQLトランザクションブロック内で行われなければなりません。 (この必要条件はPostgreSQL 6.5から厳密に強制されています。以前のバージョンでは暗黙的な必要条件であったため、守られなかった場合におかしな振舞いになってしまいました。)

libpqのラージオブジェクトインタフェースを使用するクライアントアプリケーションは、`libpq/libpq-fs.h`ヘッダファイルをインクルードし、libpqライブラリとリンクしなければなりません。

## 28.3.1. ラージオブジェクトの作成

    Oid lo_creat(PGconn *conn, int mode);

この関数はラージオブジェクトを新規に作成します。 `mode`は、新規オブジェクトの多くの各種属性を記述するビットマスクです。 ここで使われる定数シンボルは`libpq/libpq-fs.h`ヘッダファイルで定義されています。 アクセス種類(読み取り、書き込み、もしくはその両方)は、`INV_READ`ビットと`INV_WRITE`ビットの論理和を取ることで制御されます。 このマスクの下位16ビットは、過去バークレイにおいて、ラージオブジェクトを格納する、格納管理番号を識別するために使用されていました。 現在、これらのビットは常にゼロでなければなりません。 (このアクセス種類は実際には何も行いませんが、フラグビットの片方または両方はエラーを防ぐために設定されなければなりません。) 戻り値は新規ラージオブジェクトに割り当てられたOIDで、失敗時にはInvalidOid(0)が返されます。

以下に例を示します。

    inv_oid = lo_creat(conn, INV_READ|INV_WRITE);

## 28.3.2. ラージオブジェクトのインポート

オペレーティングシステム上のファイルをラージオブジェクトとしてインポートするには、以下の関数を呼び出します。

    Oid lo_import(PGconn *conn, const char *filename);

`filename`には、ラージオブジェクトとしてインポートするオペレーティングシステム上のファイルのパス名を指定します。 戻り値は、新規ラージオブジェクトに割り当てられたOIDです。 失敗時はInvalidOid(0)が返されます。 このファイルがサーバではなく、クライアントインタフェースライブラリから読み取られることに注意してください。 ですから、このファイルはクライアントのファイルシステム上に存在し、クライアントアプリケーションから読み取り可能でなければなりません。

## 28.3.3. ラージオブジェクトのエクスポート

ラージオブジェクトをオペレーティングシステム上のファイルにエクスポートするには、以下の関数を呼び出します。

    int lo_export(PGconn *conn, Oid lobjId, const char *filename);

`lobjId`引数には、エクスポートさせるラージオブジェクトのOIDを指定し、`filename`引数には、オペレーティングシステム上のファイルのパス名を指定します。 このファイルはサーバではなく、クライアントインタフェースライブラリによって書き込まれることに注意してください。 成功時には1、失敗時にはー1が返されます。

## 28.3.4. 既存のラージオブジェクトのオープン

読み取りまたは書き込みのために既存のラージオブジェクトを開く場合は、以下の関数を呼び出します。

    int lo_open(PGconn *conn, Oid lobjId, int mode);

`lobjId`には開きたいラージオブジェクトのOIDを指定します。 `mode`の各ビットは、そのオブジェクトを読み取りのみ（`INV_READ`）、書き込みのみ(`INV_WRITE`)、またはその両方できるように開くのかを制御するものです。 作成していないラージオブジェクトを開くことはできません。 `lo_open`は、`lo_read`、`lo_write`、`lo_lseek`、`lo_tell`、`lo_close`で使用する(非負の)ラージオブジェクト記述子を返します。 この記述子は現在のトランザクション期間のみで有効です。 失敗時には-1が返されます。

## 28.3.5. ラージオブジェクトへのデータの書き込み

    int lo_write(PGconn *conn, int fd, const char *buf, size_t len);

この関数は、`len`長のバイトを、`buf`から`fd`ラージオブジェクト記述子に書き込みます。 `fd`引数は事前に実行した`lo_open`の戻り値でなければいけません。 実際に書き込まれたバイト数が返されます。 エラーが発生した場合は、負の値を返します。

## 28.3.6. ラージオブジェクトからのデータの読み込み

    int lo_read(PGconn *conn, int fd, char *buf, size_t len);

この関数は、`len`長のバイトを、`fd`ラージオブジェクト記述子から`buf`に読み込みます。 `fd`引数は事前に実行した`lo_open`の戻り値でなければいけません。 実際に読み込まれたバイト数が返されます。 エラーが発生した場合は、負の値を返します。

## 28.3.7. ラージオブジェクトのシーク

ラージオブジェクト記述子に関連付けされている、現在の読み取り、または、書き込みを行う位置を変更するには、以下の関数を呼び出します。

    int lo_lseek(PGconn *conn, int fd, int offset, int whence);

この関数は`fd`で識別されるラージオブジェクト識別子の現在の位置を指すポインタを、`offset` で指定した新しい位置に変更します。 `whence`に指定可能な値は、`SEEK_SET`(オブジェクトの先頭位置からシーク)、`SEEK_CUR`(現在位置からシーク)、`SEEK_END`(オブジェクトの末尾位置からシーク)のいずれかです。 戻り値は新しい位置ポインタで、エラー時にー1が返されます。

## 28.3.8. ラージオブジェクトのシーク位置の入手

ラージオブジェクト記述子の現在の読み取り、書き込み位置を入手するには、以下の関数を呼び出します。

    int lo_tell(PGconn *conn, int fd);

エラーが発生した場合は負の値が返されます。

## 28.3.9. ラージオブジェクト記述子を閉じる

以下を呼び出すことでラージオブジェクト記述子を閉ざすことができます。

    int lo_close(PGconn *conn, int fd);

ここで、`fd`は`lo_open`の戻り値であるラージオブジェクト記述子です。 成功すると、`lo_close`は0を返します。 失敗すると、負の値を返します。

開いたままのラージオブジェクト記述子は全てトランザクションの終了時に自動的に閉ざされます。

## 28.3.10. ラージオブジェクトの削除

データベースからラージオブジェクトを削除するには、以下の関数を呼び出します。

    int lo_unlink(PGconn *conn, Oid lobjId);

`lobjId`引数は削除するラージオブジェクトのOIDを指定します。 成功時に1を、失敗時に-1を返します。

前のページ | ホーム | 次のページ
実装機能 | 上に戻る | サーバ側の関数