Вот решил малость осветить проблему, ибо в инете информации мало. Понятно, что Access - типа несерьёзно, кто-то скажет, что геморрой и т.д., но на работе пользуемся, так уж сложилось исторически, и отказываться пока не собираемся. Может, до появления нормальных стабильных версий Kexi или ещё чего-нибудь в этом роде, желательно кроссплатформенного...
Поле blob в Postgresql называется oid и содержит целочисленное значение, представляющее собой генерируемый сервером идентификатор бинарного объекта при загрузке последнего в базу функцией lo_import. Для выгрузки используется соответственно функция lo_export. Файлы хранятся вне таблиц. Если поставить в систему соответствующий драйвер odbc, то таблицы Postgresql можно связывать и использовать без всякого программирования, однако ж поля oid видятся в Access как длинные целые, и что с ними дальше делать, не очень понятно. Программно ковыряться с odbc как-то не вдохновляет, смутно вспоминается рубеж тысячелетий: DAO, сквозные запросы... Ныне более привычен ADO. Итак, ставим
PostgreSQL OLE DB Provider, после чего метод Open объекта ADODB.Connection начинает понимать провайдера по имени PostgreSQL, и начинаем писать. Я приведу несколько строк на vb, иллюстрирующих загрузку и выгрузку файла.
'Объявим переменные
Dim Conn As New ADODB.Connection, Rst As ADODB.Recordset
'Подключаемся. Если нужно, можно задать и пароль - password
Call Conn.Open("Provider='PostgreSQL';Data Source = '[адрес/имя сервера]';location ='[имя базы]';User ID = '[имя пользователя]'")
'Записываем файл в таблицу tst, содержащую поля serial id и oid file
Conn.Execute ("INSERT INTO tst(file) VALUES (lo_import('/tmp/arch.test'));")
'Создаём из таблицы объект recordset
Set Rst = Conn.Execute("SELECT * FROM objects;")
'и переходим к последней записи
Rst.MoveLast
'Выгружаем файл, на который ссылается последняя запись
Conn.Execute ("SELECT lo_export(tst.file,'/tmp/arch1.test') FROM tst WHERE id=" & Rst.Fields("id").Value & ";")
Вот примерно так незамысловато. Нужно учитывать, что SQL запросы передаются серверу, который, конечно же, может ничего не знать о локальной файловой системе. В примере загрузка/выгрузка осуществлялась в пределах файловой системы компьютера, на котором выполняется сервер. Однако ж ничто не мешает, например, замонтировать на стороне клиента самбовую шару сервера и организовать предварительное копирование файлов в неё.