powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вызов хранимой процедуры/запроса с параметром из Firebird
8 сообщений из 8, страница 1 из 1
Вызов хранимой процедуры/запроса с параметром из Firebird
    #39442483
Фотография DSKalugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В функциях PostgreSQL(9.3) есть необходимость обращаться к данным из внешней БД Firebird 2.5 для чтения, записи и объединения внешних данных join-ами с Postgres-совскими объектами.

Для внешних таблиц и запросов без параметров со скрипом использовал механизм FOREIGN DATA WRAPPER firebird
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
    CREATE FOREIGN TABLE fb_test_query(
      id SMALLINT,
      val VARCHAR(2048)
    )
    SERVER firebird_server
    OPTIONS(
      query 'SELECT id, val FROM fdw_test'
    );


Уперся в проблему использования параметрических запросов или динамических. Как передать параметр в FOREIGN TABLE - не понятно.

Какие возможны решения или технологии в рамках функций PostgreSQL?
...
Рейтинг: 0 / 0
Вызов хранимой процедуры/запроса с параметром из Firebird
    #39442488
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DSKalugin,

какая именно проблема с запросами и зачем (и куда) передавать параметр в foreign table?
Выполнять запрос самостоятельно (и, соответственно, вычитывать всю внешнюю табличку) или пропихнуть какой-то where в удалённую базу FDW - это решает планировщик postgresql при получении запроса.

Задумка FDW в том, что вы объявляете внешние таблицы и дальше с ними работаете, как будто они обычные локальные таблички, обычным локальным DML.
...
Рейтинг: 0 / 0
Вызов хранимой процедуры/запроса с параметром из Firebird
    #39442496
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
перечитав ещё раз заголовок темы - у вас в firebird есть пачка хранимок, которые вы хотите вызывать запросом из postgresql?
Сдаётся мне, через fdw (пока) никак и путь вам в pl/perl, pl/python или что-нибудь в этом духе, подключаться из хранимки к удалённой базе и вызывать хранимку там.
...
Рейтинг: 0 / 0
Вызов хранимой процедуры/запроса с параметром из Firebird
    #39443079
Фотография DSKalugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор Melkij: у вас в firebird есть пачка хранимок, которые вы хотите вызывать запросом из postgresql?
Да, именно так. Высасывать на Постгрес все и разбирать локально - не вариант т.к. таблицы в ФБ огромные (по миллиону записей). Рационально было бы вызвать процедуру с параметром, которая отберет нужное и вернет уже отфильтрованный результат.

Я и сам посматриваю в сторону pl/python, но пока не нахожу хороших примеров как этот механизм использовать.

Спасибо.
...
Рейтинг: 0 / 0
Вызов хранимой процедуры/запроса с параметром из Firebird
    #39443138
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DSKalugin,

помимо мануала могу ещё посоветовать книгу "PostgreSQL Server
Programming" Hannu Krosing, 7 глава целиком про pl/python. Обращения к другой субд - уже как обычным питоном.

Непосредственно планировщик postgresql умеет проталкивать фильтры через FDW на удалённую машину, чтобы не читать всё. А вот какие именно фильтры можно пропихнуть (и можно ли вообще) - зависит от используемого враппера. Например, SqlAlchemyFdw явно указывает, какие фильтры умеет передавать, firebird_fdw ограничивается упоминанием "some where clause". В explain analyze должно быть написано, что ушло на внешнюю субд, а что фильтровалось уже локально.
...
Рейтинг: 0 / 0
Вызов хранимой процедуры/запроса с параметром из Firebird
    #39443142
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 ...
...
Рейтинг: 0 / 0
Вызов хранимой процедуры/запроса с параметром из Firebird
    #39443281
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DSKaluginВысасывать на Постгрес все и разбирать локально - не вариант т.к. таблицы в ФБ огромные (по миллиону записей).
Конечно, если всю таблицу всасывать на каждый запрос, то это не вариант. Но, возможно, вам будет достаточно наладить репликацию из Firebird в PG чтобы иметь там постоянно актуальную копию данных и делать запросы по ней.
...
Рейтинг: 0 / 0
Вызов хранимой процедуры/запроса с параметром из Firebird
    #39443359
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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", как знатного пайтониста, если ему не в падлу накидать пальцевый пример . но он, упс, не засветил своего мыла
т.ч. тут вам потребуецца проявить навыки детектива
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вызов хранимой процедуры/запроса с параметром из Firebird
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]