Например, в MySQL можно подать запрос: use database.
Пока на ум приходит только вот такая штука:
SELECT dblink_connect('hostaddr=HOST port=PORT dbname=REMOTE_DBNAME user=USERNAME password=PASS');
SELECT * FROM dblink();
Еще можно разместить все в одной базе в разных schema
Так не пойдёт. Всё уже работает в проде. Мне нужно лишь перебрать базы и внести в них изменения. Топорно я задачу решу. Хотелось бы красиво. Вообще удивлён, что в PostrgeSQL нет методов для смены базы данных в пределах одного сервера.
В psql есть, в общем диалекте - нет
Я понимаю, но я работаю во фреймворке и ограничен возможностями PDO. Обращаться к внешнему процессу будет не очень удачной идеей. Просто в моём случае придётся отказаться от ORM фреймворка и напрямую создавать объект PDO, а потом уничтожать и создавать новый, присоединённый к другой базе.
А функици этот ваш орм умеет вызывать и селектить из них?
а как вы себе это представляете? ну вот сменили вы базу конекшена и у вас весь блин микросервис вдруг обнаруживает что вместо запросов к базе A у него теперь подключение к базе B и пошло поехало
Очень просто представляю. Есть 46 баз. Надо зайти в каждую по очереди и внести изменения в данные. Я надеялся что postgres умеет базы переключать. Но нет.
Ну вот dblink_exec делать в каждую, в цикле, все внутри процедуры в постгресе. его силами. Не вариант?
на каджо дневной основе?
Эх, облом, там сервер - десятка. dblink_exec нету.
так вы на клиенте и переключайте: $db = pdo_connect('db1'); pdo_exec($db, $query); $db = pdo_connect('db2'); pdo_exec($db, $query); $db = pdo_connect('db3'); pdo_exec($db, $query); ...
Это откуда такие функции? Там же new PDO($conStr);
это выдуманные функции для примера алгоритма
Ну там не так работает. Там полностью создание нового объекта. Невозможно переключить базу. Я собственно с утра уже всё сделал.
и в чём проблема новый объект создать? :-)
Проблемы нету. Просто в рамках парадигмы фреймворка выглядит несколько некузяво. Получается, что я обращаюсь к БД не средствами фреймворка, а минуя его абстракции. Потом придёт другой программер и несколько офигеет.
почему минуя? одна база — один объект
Потому, что во фреймворке есть собственные классы для работы с базой. И они создаются и инициализируются под капотом. И я не нашёл способа переключить их на другую базу. Точнее способ есть, но он не лучше, чем работать через PDO. Там надо будет динамически жонглировать конфигурацией, а с учётом того, что она кешериутеся, ну его наф.
аа, вы про фреймворк который поверх pdo, понял
во-во, истинно так. Мой вопрос как раз состоял в том, как переключить базу. Правильный ответ - никак. PostrgreSQL этого не умеет.
они не инициируются под капотом .. а непосредственно параметрами из конфигурации .. сделайте несколько инстансов db1, db2 и прокидывайте когда Вам надо и куда надо
Верно. Но если заранее известно колечество баз. А если это делается динамически, да ещё этих баз под сотню...
тогда это делается на другом уровне
ну как то меня всю жизнь учили, что нельзя привязіваться обьектами к конкретной базе, а все хранить или создавать в конфигурационных файлах... И вообще я всегда в фреймворке первым делом писал объект для работы с базой данных, а уже дальше работал через него...
Я не привязываюсь объектами к базе. Я в цикле перебираю данные для коннекта. Создаю PDO, работаю с ним, прибиваю. На следующей итерации всё сначала.
Обсуждают сегодня