Комментарии 7
А разве dblink не устарел ещё лет 10 назад? Уже давно же есть postgres_fdw.
The functionality provided by this module overlaps substantially with the functionality of the older dblink module. But
postgres_fdw
provides more transparent and standards-compliant syntax for accessing remote tables, and can give better performance in many cases.
Очень жаль, что статья - исключительно о "когда всё нормально". Хотя куда как более полезно было бы хотя бы на уровне симптоматики рассмотреть и случаи. когда не всё ладно. К примеру, обрыв соединения - как детектировать? как восстанавливать? какие побочные проблемы ещё придётся решать?
Кроме того, совершенно не рассмотрен случай, когда нужно, кроме установления линка, выполнить несколько команд донастройки. Скажем, в случае MySQL - настройка требуемого Server SQL Mode, настройка кодировок и зон времени... как заставить необходимые команды выполниться по факту открытия подключения без дополнительных телодвижений на стороне клиентского кода?
Далее - ошибки. Точнее, трансляция с удалённого сервера подробной диагностики (в оптимуме - оригинал сообщения об ошибке, сгенерированного удалённым сервером). Думаю, этот вопрос тоже следовало бы рассмотреть.
Ну и вопрос трансляции типов данных. Например, как транслируется из MySQL отсутствующий в PostgreSQL тип данных SET?
По-моему, рассмотрение всех этих моментов значительно поднимет ценность статьи - сейчас она, прямо скажем, "типично-OTUSовская".
Если бы кроме этого в статье ещё было рассмотрено, когда нужен dblink, а когда FDW, то я бы ей плюс поставил. А так просто не стал минусовать
Рылся в гугле, наткнулся на эту статью.
К примеру, обрыв соединения - как детектировать?
Вот с этим совсем грустно, видимо. У меня когда функция падает на дблинке, то крашит ETL. 3 дня пытался отправить ошибку дблинка (потеря соeдинения или отсутствующий столбец в источнике, читаю с реплики) в эксепшен блок (а в нем уже записать ошибку в таблицу с логом), а ETL просто падает на месте и всё. Грусть.
Если кто знает способ - напишите плз.
пс: PG14
Вместо dblink_exec пользуйтесь dblink_send_query. Потеря соединения детектируется dblink_is_busy (валится ошибкой). Ошибки извлекаются dblink_error_message. Если не нужна асинхронность, то проще использовать dblink_get_result(connname => 'SlaveN', fail_on_error => true).
Вопрос знатокам, в других местах пишут что дблинк только для подключения "ПГ - ПГ", и одбц мол не поддерживает, и когда пытаешься повторить тоже самое что описано в статье ругается: неверный параметр соединения "dsn"
Т.е. это трактовать можно как то что ему в принципе dsn не нравится в строке подключения, или что с самим dsn что-то не так, как вариант, в одбц конфиге что-то не так с ним?
Интеграция PostgreSQL с другими СУБД через dblink