Pdo\Pgsql::lobCreate

(PHP 8 >= 8.4.0)

Pdo\Pgsql::lobCreate新しいラージオブジェクトを作成する

説明

public Pdo\Pgsql::lobCreate(): string|false

Pdo\Pgsql::lobCreate() は、 ラージオブジェクトを作成してその OID を返します。 このオブジェクトに対するデータの読み書きは、 Pdo\Pgsql::lobOpen() を使用します。

OID は OID 型のカラムに格納され、 ラージオブジェクトを参照するために使用されます。 これにより、行のサイズがどんどん拡大してしまうことを防ぎます。 ラージオブジェクトは Pdo\Pgsql::lobUnlink() を コールして削除するまで、データベースに残り続けます。

ラージオブジェクトの取り扱いは複雑です。 オブジェクトの OID を参照している行をデータベースから削除する際には、 必ず事前に PDO::pgsqlLOBUnlink()をコールしなければなりません。 そうしないと、どこからも参照されないラージオブジェクトが、サーバーに残り続けてしまうでしょう。 さらに、ラージオブジェクトにはアクセス権を設定できません。 代替として、bytea 型のカラムも検討ください。最近のバージョンの PostgreSQL では bytea 型のカラムに最大 1GBまで保存でき、行サイズを最適化したうえでデータを透過的に扱うことができます。

注意: この関数を含むラージオブジェクトへの全ての操作は トランザクション内で行わなければなりません。

パラメータ

この関数にはパラメータはありません。

戻り値

成功した場合、新しく作成されたラージオブジェクトの OID、 失敗した場合に false を返します。

例1 Pdo\Pgsql::lobCreate() の例

この例では、新しいラージオブジェクトを作成し、 ファイルの内容をそこにコピーします。その後、 OID がテーブルに保存されます。

<?php
$db
= new Pdo\Pgsql('pgsql:dbname=test host=localhost', $user, $pass);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->beginTransaction();
$oid = $db->lobCreate();
$stream = $db->lobOpen($oid, 'w');
$local = fopen($filename, 'rb');
stream_copy_to_stream($local, $stream);
$local = null;
$stream = null;
$stmt = $db->prepare("INSERT INTO BLOBS (ident, oid) VALUES (?, ?)");
$stmt->execute([$some_id, $oid]);
$db->commit();
?>

参考

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top