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