Baza de date::setActiveConnection() doar setează ca conexiune activă o conexiune definită în fișierul settings.php sau adăugată dintr-un apel anterior la Baza de date::addConnectionInfo().
Codul corect ar fi următorul.
$postgis_database = [
  'database' => $drugis_postgis_connection->getdatabase(),
  'username' => $drugis_postgis_connection->getusername(),
  'parolă' => $drugis_postgis_connection->getpassword(),
  'gazdă' => $drugis_postgis_connection->gethost(),
  'driver' => 'pgsql',
];
// $key $target
Database::addConnectionInfo('postgis','default', $postgis_database);
// $target $key
Database::setActiveConnection('default', 'postgis');
Observați ordinea parametrilor în ultimele două apeluri de metodă. Observați, de asemenea, ordinea indexului matricei folosită în $bază de date matrice setată în fișierul settings.php.
// $key $target
$databases['default']['default'] = [
  'database' => 'databasename',
  'username' => 'sqlusername',
  'parolă' => 'parolă sql',
  'host' => 'localhost',
  'port' => '3306',
  'driver' => 'mysql',
  'prefix' => ''',
  'colation' => 'utf8mb4_general_ci',
 ];
Conexiunile adăugate cu Baza de date::addConnectionInfo() nu sunt permanente; se adaugă la proprietatea statică a Bază de date clasă. Toate funcțiile/metodele care doresc să utilizeze conexiunea definită în $postgis_database trebuie să execute codul pe care l-am arătat înainte de a interoga baza de date sau de a salva valori în baza de date.
Probabil că este mai bine să adăugați conexiunile suplimentare în setări.
O eroare de evitat este apelarea funcțiilor Drupal care interogează un anumit tabel al bazei de date Drupal după apel Database::setActiveConnection('default', 'postgis'). De exemplu, a suna taxonomy_term_load_multiple_by_name() după Database::setActiveConnection('default', 'postgis') nu va funcționa, cu excepția cazului în care baza de date postgis/default conține o copie a tabelelor utilizate din Drupal. (De obicei, acesta nu este cazul, deoarece un modul care utilizează o altă bază de date nu va face o copie a tabelelor pe care Drupal se așteaptă să le găsească în acea bază de date.)
Înainte de a apela funcții precum taxonomy_term_load_multiple_by_name(), codul ar trebui să sune Baza de date::setActiveConnection(), care restabilește conexiunea activă la cea implicită utilizată de Drupal, care este pentru o bază de date care conține toate tabelele utilizate din Drupal.