|
Вызов хранимой процедуры/запроса с параметром из Firebird
|
|||
---|---|---|---|
#18+
В функциях PostgreSQL(9.3) есть необходимость обращаться к данным из внешней БД Firebird 2.5 для чтения, записи и объединения внешних данных join-ами с Postgres-совскими объектами. Для внешних таблиц и запросов без параметров со скрипом использовал механизм FOREIGN DATA WRAPPER firebird Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
Уперся в проблему использования параметрических запросов или динамических. Как передать параметр в FOREIGN TABLE - не понятно. Какие возможны решения или технологии в рамках функций PostgreSQL? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2017, 18:29 |
|
Вызов хранимой процедуры/запроса с параметром из Firebird
|
|||
---|---|---|---|
#18+
DSKalugin, какая именно проблема с запросами и зачем (и куда) передавать параметр в foreign table? Выполнять запрос самостоятельно (и, соответственно, вычитывать всю внешнюю табличку) или пропихнуть какой-то where в удалённую базу FDW - это решает планировщик postgresql при получении запроса. Задумка FDW в том, что вы объявляете внешние таблицы и дальше с ними работаете, как будто они обычные локальные таблички, обычным локальным DML. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2017, 18:38 |
|
Вызов хранимой процедуры/запроса с параметром из Firebird
|
|||
---|---|---|---|
#18+
перечитав ещё раз заголовок темы - у вас в firebird есть пачка хранимок, которые вы хотите вызывать запросом из postgresql? Сдаётся мне, через fdw (пока) никак и путь вам в pl/perl, pl/python или что-нибудь в этом духе, подключаться из хранимки к удалённой базе и вызывать хранимку там. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2017, 18:44 |
|
Вызов хранимой процедуры/запроса с параметром из Firebird
|
|||
---|---|---|---|
#18+
автор Melkij: у вас в firebird есть пачка хранимок, которые вы хотите вызывать запросом из postgresql? Да, именно так. Высасывать на Постгрес все и разбирать локально - не вариант т.к. таблицы в ФБ огромные (по миллиону записей). Рационально было бы вызвать процедуру с параметром, которая отберет нужное и вернет уже отфильтрованный результат. Я и сам посматриваю в сторону pl/python, но пока не нахожу хороших примеров как этот механизм использовать. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2017, 10:05 |
|
Вызов хранимой процедуры/запроса с параметром из Firebird
|
|||
---|---|---|---|
#18+
DSKalugin, помимо мануала могу ещё посоветовать книгу "PostgreSQL Server Programming" Hannu Krosing, 7 глава целиком про pl/python. Обращения к другой субд - уже как обычным питоном. Непосредственно планировщик postgresql умеет проталкивать фильтры через FDW на удалённую машину, чтобы не читать всё. А вот какие именно фильтры можно пропихнуть (и можно ли вообще) - зависит от используемого враппера. Например, SqlAlchemyFdw явно указывает, какие фильтры умеет передавать, firebird_fdw ограничивается упоминанием "some where clause". В explain analyze должно быть написано, что ушло на внешнюю субд, а что фильтровалось уже локально. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2017, 11:33 |
|
Вызов хранимой процедуры/запроса с параметром из Firebird
|
|||
---|---|---|---|
#18+
DSKalugin, В описании fdw для firebird среди возможностей вижу: pushdown of some WHERE clause conditions to Firebird (including translation of built-in functions) Так что в запросе вида: SELECT ... FROM fdw_table WHERE col = ... WHERE будет передаваться на сторону firebird. Вот и используйте это как параметры. Проверить какой именно запрос отправляется на внешний сервер можно командой EXPLAIN VERBOSE ... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2017, 11:40 |
|
Вызов хранимой процедуры/запроса с параметром из Firebird
|
|||
---|---|---|---|
#18+
DSKaluginВысасывать на Постгрес все и разбирать локально - не вариант т.к. таблицы в ФБ огромные (по миллиону записей). Конечно, если всю таблицу всасывать на каждый запрос, то это не вариант. Но, возможно, вам будет достаточно наладить репликацию из Firebird в PG чтобы иметь там постоянно актуальную копию данных и делать запросы по ней. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2017, 13:50 |
|
Вызов хранимой процедуры/запроса с параметром из Firebird
|
|||
---|---|---|---|
#18+
DSKalugin Я и сам посматриваю в сторону pl/python, но пока не нахожу хороших примеров как этот механизм использовать. в пайтоне я не копенгаген, но что--то подобное в перле делается через DBI =>ищем http://stackoverflow.com/questions/3128961/what-is-the-python-equivalent-of-perls-dbi далее можно поискать примеры работы из пайтона с fb прямо тут http://www.sql.ru/forum/actualsearch.aspx?search=python&sin=0&bid=2&a=&ma=0&dt=-1&s=1&so=1 а как возвращать сетоф из пж--ф-ии -- взять в ФМ: https://www.postgresql.org/docs/current/static/plpython-data.html#AEN68775 можете конечно попросить конкретно "antonov.impulsm", как знатного пайтониста, если ему не в падлу накидать пальцевый пример . но он, упс, не засветил своего мыла т.ч. тут вам потребуецца проявить навыки детектива ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2017, 15:21 |
|
|
start [/forum/topic.php?fid=53&fpage=75&tid=1996564]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 142ms |
0 / 0 |