Pdo\Pgsql::lobCreate
新しいラージオブジェクトを作成する
&reftitle.description;
public stringfalsePdo\Pgsql::lobCreate
Pdo\Pgsql::lobCreate は、
ラージオブジェクトを作成してその OID を返します。
このオブジェクトに対するデータの読み書きは、
Pdo\Pgsql::lobOpen を使用します。
OID は OID 型のカラムに格納され、
ラージオブジェクトを参照するために使用されます。
これにより、行のサイズがどんどん拡大してしまうことを防ぎます。
ラージオブジェクトは Pdo\Pgsql::lobUnlink を
コールして削除するまで、データベースに残り続けます。
ラージオブジェクトの取り扱いは複雑です。
オブジェクトの OID を参照している行をデータベースから削除する際には、
必ず事前に PDO::pgsqlLOBUnlinkをコールしなければなりません。
そうしないと、どこからも参照されないラージオブジェクトが、サーバーに残り続けてしまうでしょう。
さらに、ラージオブジェクトにはアクセス権を設定できません。
代替として、bytea 型のカラムも検討ください。最近のバージョンの PostgreSQL では
bytea 型のカラムに最大 1GBまで保存でき、行サイズを最適化したうえでデータを透過的に扱うことができます。
この関数を含むラージオブジェクトへの全ての操作は
トランザクション内で行わなければなりません。
&reftitle.parameters;
&no.function.parameters;
&reftitle.returnvalues;
成功した場合、新しく作成されたラージオブジェクトの OID、
&return.falseforfailure;。
&reftitle.examples;
Pdo\Pgsql::lobCreate の例
この例では、新しいラージオブジェクトを作成し、
ファイルの内容をそこにコピーします。その後、
OID がテーブルに保存されます。
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();
?>
]]>
&reftitle.seealso;
Pdo\Pgsql::lobOpen
Pdo\Pgsql::lobUnlink
pg_lo_create
pg_lo_open