точнее dblink_connect. Написал тестовый пример, но у меня у него просадка идёт жутчайшая по скорости. Т.е. просто вставка 1000 записей с commit на каждой занимает 19 ms, в то время, как через dblink от 2 минут, что уже прям очень печально. Посмотрите, пожалуйста, может я неверно его "готовлю"? Вот тут код текстом: https://gist.github.com/shubin-d/880c7f757bfbfe08179968f781168b37
Зачем делать коннект на каждой итерации цикла? Какое время показывают 2-ой и 3-ий варианты?
Да вы, батенька, норкоманен отъявленный! в постгрес_фдв вставлять по через дблинк. И жаловаться, что медленно.
Подскажите, как делать верно? Интернеты выдали несколько вариантов и все они вот такие вот... Я к сожалению, еще только вникаю в особенности работы данной БД. А про много вставок - это синтетический тест. Мне надо использовать такие вставки для системы логирования, которая пишет данные в отдельную таблицу. Нужно это повторить при переносе легаси кода из Oracle (потом уже надежда, что дадут переделать на что-то адекватное).
Переобзовите своё постгрес_фдв подключение, для исключения двусмысленности.
> Интернеты выдали несколько вариантов и все они вот такие вот... В случае с ПГ надо ВСЕГДА начинать с официальной документации (например, по CREATE SERVER): https://postgrespro.ru/docs/postgresql/12/sql-createserver А тама: CREATE SERVER myserver FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'foo', dbname 'foodb', port '5432'); Ибо localhost - это зарезервированное по умолчанию имя хоста, и использовать его в более других случаях - наживать проблемы на ровном месте.
И да, присоединяюсь к вопросу. Нафига на каждую вставку делать коннект? Потому как подобные вещи делаются несколько по-другому: пытаетесь вставить по через название соединения, ловите исключение отсутствия такого соединения, создаёте его, используя форму dblink_connect(text connname, text connstr) returns text. Ну или проверяете, есть, нет. Есть вставляете данные, нет - открываете.
Обсуждают сегодня