PHP: PDO::pgsqlLOBCreate - Manual

downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

PDO::pgsqlLOBOpen PDO_PGSQL DSN

Last updated: Sat, 27 Jan 2007

view this page in

# PDO::pgsqlLOBCreate

(no version information, might be only in CVS)

PDO::pgsqlLOBCreate -- Creates a new large object

## Описание

string PDO::pgsqlLOBCreate ( void )

PDO::pgsqlLOBCreate() creates a large object and returns the OID of that object. You may then open a stream on the object using PDO::pgsqlLOBOpen() to read or write data to it. The OID can be stored in columns of type OID and be used to reference the large object, without causing the row to grow arbitrarily large. The large object will continue to live in the database until it is removed by calling PDO::pgsqlLOBUnlink().

Large objects can be up to 2GB in size, but are cumbersome to use; you need to ensure that PDO::pgsqlLOBUnlink() is called prior to deleting the last row that references its OID from your database. In addition, large objects have no access controls. As an alternative, try the bytea column type; recent versions of PostgreSQL allow bytea columns of up to 1GB in size and transparently manage the storage for optimal row size.

> Замечание: This function must be called within a transaction.

## Список параметров

PDO::pgsqlLOBCreate() takes no parameters.

## Возвращаемые значения

Returns the OID of the newly created large object on success, or `FALSE` on failure.

## Примеры

Пример 1. A PDO::pgsqlLOBCreate() example

This example creates a new large object and copies the contents of a file into it. The OID is then stored into a table.

`<?php
$db = new PDO('pgsql:dbname=test host=localhost', $user, $pass);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->beginTransaction();
$oid = $db->pgsqlLOBCreate();
$stream = $db->pgsqlLOBOpen($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(array($some_id, $oid));
$db->commit();
?>`

## Смотрите также

PDO::pgsqlLOBOpen()
PDO::pgsqlLOBUnlink()
pg_lo_create()

add a note User Contributed Notes
PDO::pgsqlLOBCreate
mauroi at digbang dot com
03-Apr-2006 09:38
`IMHO, there's a better way to handle the deletion of lob objects than the suggested here. The programmer can easily forget to unlink the lob. With the following trigger, no programmer actions are required.
By the way, one problem with bytea fields is that when you query the database, if you ask for that field, the data is actually retrieved. When you query for and oid, only the oid is retrieved and then you can open the lob whenever you want (if it's required).
CREATE OR REPLACE FUNCTION oidtable_after_update_delete()
RETURNS "trigger" AS
$BODY$
BEGIN
IF (TG_OP = 'UPDATE') THEN
IF (OLD.oidfield = NEW.oidfield) OR (OLD.oidfield IS NULL) THEN
RETURN NEW;
END IF;
END IF;
IF (EXISTS (SELECT 1 FROM pg_largeobject WHERE loid = OLD.oidfield)) THEN
PERFORM LO_UNLINK (OLD.oidfield);
END IF;
RETURN NEW;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
CREATE TRIGGER oidtable_after_update_delete
AFTER UPDATE OR DELETE
ON oidtable
FOR EACH ROW
EXECUTE PROCEDURE oidtable_after_update_delete();`
add a note
PDO::pgsqlLOBOpen PDO_PGSQL DSN

Last updated: Sat, 27 Jan 2007
show source | credits | stats | sitemap | contact | advertising | mirror sites
Copyright © 2001-2007 The PHP Group
All rights reserved.
This mirror generously provided by: Yahoo! Inc.
Last updated: Sat Mar 10 10:36:09 2007 PST