Jerome Eteve

NAME

Pg::Blobs - Blobs management methods for Postgresql related DB modules.

SYNOPSIS

This is a Moose::Role. Consume it in your DB management class and implement the method pgblobs_dbh.

Note that blob management in postgresql do not work outside a transaction.

Blobs are just numeric OIDs in postgresql. You will have to store them in a classic OID table column for later retrieval.

Example:

    package My::DB;
    use Moose;
    with qw/Pg::Blobs/;

    sub pgblobs_dbh{ .. return the dbh connection of your choice ..}
    ...

    package main;
    my $db = .. an instance of My::DB ..;

    #### IMPORTANT: IN A TRANSACTION
    my $blob = $db->pgblobs_store_blob('binary content');
    my $content = $db->pgblobs_fetch_blob($blob);
    etc..

pgblobs_create_blob

Creates a Postgresql empty blob (oid) and returns it.

Note that it is not very useful. Use pgblobs_stream_in_blob or pgblobs_store_blob instead.

Usage:

   my $blob = $this->pgblobs_create_blob()

pgblobs_store_blob ($buf)

Stores the given binary content in the postgresql db and return the blob id.

Usage:

   my $blob = $this->pgblobs_store_blob('Full short binary content');

pgblobs_stream_in_blob ($sub)

Pulls data using the given read code, storing it into a new blob.

Returns the new blob id.

Usage:

    my $blob = $this->pgblobs_stream_in_blob(sub{ return 'Next slice of bytes or undef' ;});

pgblobs_stream_out_blob

Streams out the given blob ID in the given write sub and return the number of bytes retrieved.

Example:

   $s->stream_out_blob(sub{ my $fresh_bytes = shift ; ... ; } , $oid );

pgblobs_fetch_blob ($oid)

Fectches the blob binary content in one go

Usage:

  my $small_content = $this->pgblobs_fetch_blob($blob);