База данных::setActiveConnection() просто устанавливает в качестве активного соединения соединение, определенное в файле settings.php или добавленное из предыдущего вызова База данных:: аддконнектионинфо().
Правильный код будет следующим.
$postgis_database = [
  'база данных' => $drugis_postgis_connection->getdatabase(),
  'имя пользователя' => $drugis_postgis_connection->getusername(),
  'пароль' => $drugis_postgis_connection->getpassword(),
  'хост' => $drugis_postgis_connection->gethost(),
  'драйвер' => 'pgsql',
];
// $ключ $цель
Database::addConnectionInfo('postgis','default', $postgis_database);
// $целевой ключ $
Database::setActiveConnection('по умолчанию', 'postgis');
Обратите внимание на порядок параметров в последних двух вызовах метода. Обратите также внимание на порядок индексов массива, используемый в $база данных массив, заданный в файле settings.php.
// $ключ $цель
$базы данных['по умолчанию']['по умолчанию'] = [
  'база данных' => 'имя базы данных',
  'имя пользователя' => 'sqlusername',
  'пароль' => 'sqlpassword',
  'хост' => 'локальный хост',
  'порт' => '3306',
  'драйвер' => 'mysql',
  'префикс' => '',
  'сопоставление' => 'utf8mb4_general_ci',
 ];
Соединения, добавленные с База данных:: аддконнектионинфо() не являются постоянными; они добавляются к статическому свойству База данных учебный класс. Все функции/методы, которые хотят использовать соединение, определенное в $postgis_database необходимо выполнить код, который я показал, прежде чем запрашивать базу данных или сохранять значения в базе данных.
Возможно, лучше добавить дополнительные подключения в настройках.
Ошибкой, которую следует избегать, является вызов функций Drupal, которые запрашивают определенную таблицу базы данных Drupal после вызова База данных::setActiveConnection('по умолчанию', 'postgis'). Например, вызов таксономия_term_load_multiple_by_name() после База данных::setActiveConnection('по умолчанию', 'postgis') не будет работать, за исключением случая, когда база данных postgis/default содержит копию таблиц, используемых в Drupal. (Обычно это не так, поскольку модуль, использующий другую базу данных, не собирается делать копии таблиц, которые Drupal ожидает найти в этой базе данных.)
Перед вызовом таких функций, как таксономия_term_load_multiple_by_name(), код должен вызывать База данных::setActiveConnection(), который восстанавливает активное соединение с соединением по умолчанию, используемым Drupal, которое предназначено для базы данных, содержащей все таблицы, используемые из Drupal.