Re: [pgsql-ru-general] Оригинальный Вопрос

Поиск
Список
Период
Сортировка
От Dmitry Igrishin
Тема Re: [pgsql-ru-general] Оригинальный Вопрос
Дата
Msg-id CAAfz9KM9ZPyxsjF1mQuvwFBwabL28POMbygj1q0qUEsFzFuJng@mail.gmail.com
обсуждение исходный текст
Ответ на Оригинальный Вопрос  (Владимир Комаров <vlads@sibnet.ru>)
Список pgsql-ru-general


29 сентября 2015 г., 21:05 пользователь Владимир Комаров <vlads@sibnet.ru> написал:

Добрый день

Есть вопрос:

Есть две базы с таблицей

CREATE TABLE sys.files(

  bd character(3),

  file oid,

  dat timestamp without time zone DEFAULT now()

)WITH (  OIDS=FALSE);

К базе1 подключена база2 для передачи данных в основную (файлы)

CREATE FOREIGN TABLE kku.fkas

   (bd character(3) ,

    file oid ,

    dat timestamp without time zone )

   SERVER bd2

   OPTIONS (table_name 'files', schema_name 'sys');

 

В таблицах хранятся файлы. (IOD)

Если я просто перекидываю из одной таблицы в другую данные

INSERT INTO kku.files  (select * FROM kku.fkas);

Данные передаются, но естественно, только уже ненужные ссылки на OIDы

А как перетащить именно данные? Направьте, пожалуйста.

Если речь идёт о BLOB, и в таблицах хранятся идентификаторы BLOB,
то Вам необходимо использовать API для BLOB:
а ещё лучше, его подмножество:
Каждый вызов функции этого API должен быть в транзакции.
Рекомендую добавить ещё какой-нибудь идентификатор самих данных,
например, хотя бы хэш MD5, чтобы можно было легко и быстро
выполнять задачи синхронизации данных между несколькими
базами.

 

PS данные загружаются при помощи php по принципу такого алгоритма:

    //Помещение файла в таблицу

    $file_handle=fopen("$userfile_name", "rb"); //Открываем курсор файла, который мы только что закачали на сервер для бинарного чтения (rb)

    $file_content = fread($file_handle, filesize($userfile_name)); //Читаем файл в переменную

    fclose($file_handle); //Закрываем курсор

    pg_exec ($conn, "BEGIN;"); //Работа с lo требует транзакции

    $oid = pg_locreate ($conn); //Создаем большой объект

    $handle = pg_loopen ($conn, $oid, "wb"); //Открываем его для записи (на всякий случай к флагу w добавляем b для бинарников)

    pg_lowrite ($handle, $file_content); //Записываем в объект содержимое файла

    @pg_exec($conn, "INSERT INTO kku.filses (bd, file) VALUES (‘BD1’,$oid);");

 




--
;; Dmitry.

В списке pgsql-ru-general по дате отправления:

Предыдущее
От: Владимир Комаров
Дата:
Сообщение: Оригинальный Вопрос
Следующее
От: "Dmitry E. Oboukhov"
Дата:
Сообщение: Партицирование и план запросов и индексы