Crie uma tabela no banco com um campo oid
Ex:. CREATE TABLE tbImoveis_Fotos (idImovel int, foto oid )
No cliente, use as funções: "pg_locreate", "pg_lowrite", "pg_loclose" para criar um blob e escrever nele a foto como conteúdo.
O "pg_loopen" retorna a chave do BLOB que será usada pelo comando "INSERT". Se você der um SELECT na tabela "pg_largeobject", usando esta chave, você verá sua foto (binário) dividida em páginas.
Um exemplo de utilização em PHP
function GravarImagemImovel ($HANDLE_CONN, $NOMEIMG, $IMG) {
$OID = pg_locreate ( $HANDLE_CONN);
$HANDLE_BLOB = pg_loopen ( $HANDLE_CONN, $OID, 'w' );
pg_lowrite ( $HANDLE_BLOB, $IMG );
pg_loclose ( $HANDLE_BLOB );
pg_exec ( $HANDLE_CONN,
"INSERT INTO tbImoveis_Fotos ( idImovel, Foto )
VALUES ( '$NOMEIMG', $HANDLE_BLOB ) "
);
}
Exemplo para mostrar a sua imagem:
function GravarImagemImovel ($HANDLE_CONN, $NOMEIMG, $IMG) {
$OID = pg_locreate ( $HANDLE_CONN);
$HANDLE_BLOB = pg_loopen ( $HANDLE_CONN, $OID, 'w' );
pg_lowrite ( $HANDLE_BLOB, $IMG );
pg_loclose ( $HANDLE_BLOB );
pg_exec ( $HANDLE_CONN,
"INSERT INTO tbImoveis_Fotos ( idImovel, Foto )
VALUES ( '$NOMEIMG', $HANDLE_BLOB ) "
);
}<?php
header('Content-type: image/jpg');
$HndCon=pg_connect("host=192.168.0.1 port=5432 dbname=imob user=postgres");
pg_exec($HndCon,"BEGIN");
$HndRes=pg_exec($HndCon,"SELECT foto FROM tbImoveis_Fotos WHERE IdImovel='$IdImovel'");
$Linha=pg_fetch_array($HndRes,0);
$Img=pg_loopen($HndCon,$Linha['foto'],'r');
pg_loreadall($Img);
pg_exec($HndCon,"COMMIT");
pg_close($HndCon);
?>
Não esqueça que a leitura de um BLOB deve sempre estar dentro de uma transação