| From: | Dmitry Igrishin <dmitigr(at)gmail(dot)com> |
|---|---|
| To: | Владимир Комаров <vlads(at)sibnet(dot)ru> |
| Cc: | pgsql-ru-general <pgsql-ru-general(at)postgresql(dot)org> |
| Subject: | Re: [pgsql-ru-general] Оригинальный Вопрос |
| Date: | 2015-09-29 20:07:04 |
| Message-ID: | CAAfz9KM9ZPyxsjF1mQuvwFBwabL28POMbygj1q0qUEsFzFuJng@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-ru-general |
29 сентября 2015 г., 21:05 пользователь Владимир Комаров <vlads(at)sibnet(dot)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:
http://www.postgresql.org/docs/current/static/largeobjects.html
а ещё лучше, его подмножество:
http://www.postgresql.org/docs/current/static/lo-funcs.html
Каждый вызов функции этого 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.
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Dmitry E. Oboukhov | 2015-10-03 13:16:03 | Партицирование и план запросов и индексы |
| Previous Message | Владимир Комаров | 2015-09-29 18:05:02 | Оригинальный Вопрос |