Der spezielle ODBC-Treiber 'odbc-postgresql' für das DBMS PostgreSQL kann über die Anwendungsverwaltung installiert werden. Alternativ geben Sie in einem Terminal folgende Zeile ein:
$ sudo apt-get install odbc-postgresql
So sehen Sie nach, welche ODBC-Treiber bereits installiert wurden:
$ find /usr/lib -name '*odbc*.so' /usr/lib/gambas3/gb.db.odbc.so → Gambas-ODBC-Treiber /usr/lib/x86_64-linux-gnu/odbc/libodbctxtS.so /usr/lib/x86_64-linux-gnu/odbc/psqlodbca.so → PostgreSQL-ODBC-Treiber /usr/lib/x86_64-linux-gnu/odbc/libodbcpsqlS.so → PostgreSQL-ODBC-Treiber ... /usr/lib/x86_64-linux-gnu/odbc/psqlodbcw.so → PostgreSQL-ODBC-Treiber ...
Die Konfiguration der speziellen ODBC-Treiber erfolgt stets in der systemweit geltenden Datei mit dem Pfad /etc/odbcinst.ini.
Nach der Installation des ODBC-Treibers 'odbc-postgresql' für das DBMS PostgreSQL existiert bereits eine automatisch erzeugte Konfigurationsdatei /etc/odbcinst.ini mit folgendem Inhalt:
[PostgreSQL ANSI] Description=PostgreSQL ODBC driver (ANSI version) Driver=psqlodbca.so Setup=libodbcpsqlS.so Debug=0 CommLog=1 UsageCount=1
[PostgreSQL Unicode] Description=PostgreSQL ODBC driver (Unicode version) Driver=psqlodbcw.so Setup=libodbcpsqlS.so Debug=0 CommLog=1 UsageCount=1
Die Namen der ODBC-Treiber stehen in den eckigen Klammern und werden bei der Konfiguration des Datenquellenamens (DataSourceName) benötigt.
Die Konfiguration eines Datenquellenamen (DSN) erfolgt in der systemweit geltenden Datei /etc/odbcinst.ini oder lokal in der Datei /etc/odbc.ini.
In unserem Fall konfigurieren wir den Datenquellenamen in der Datei .odbc.ini im Home-Verzeichnis des angemeldeten System-Benutzers mit lokalem Bezug. Sie können alternativ die Datei /etc/odbc.ini für einen systemweit geltenden Datenquellenamen verwenden. Den Namen können Sie frei festlegen. Er darf aber in der Konfigurationsdatei nur einmal vorkommen. In der folgenden Konfiguration wird 'dsn_pg_postgres' für das DBMS PostgreSQL und die verwendete Datenbank 'postgres' verwendet. Den ODBC-Treiber `PostgreSQL Unicode` aus der Datei /etc/odbcinst.ini können Sie in der versteckten Konfigurationsdatei ~/.odbc.ini wie folgt referenzieren:
[dsn_pg_postgres] Description = PostgreSQL UTF8 DB `postgres` Driver = PostgreSQL Unicode ServerName = localhost Port = 5432 User = postgres Password = *PASSWORT* Database = postgres ReadOnly = No
Für die Inspektion der ODBC-Treiber können Sie das Konsolen-Programm odbcinst einsetzen. Mit den Optionen -q und -d werden die Namen aller (speziellen) ODBC-Treiber aufgelistet, die sich bisher bei unixODBC registriert haben:
$ odbcinst -d -q [PostgreSQL ANSI] [PostgreSQL Unicode]
Das Kommando odbcinst -q -s dagegen listet alle ODBC-Datenquellenamen (DSN) auf, die Sie zum Beispiel in der lokalen Konfigurationsdatei ~/.odbc.ini definiert haben:
hans@mint20:~$ odbcinst -q -s [dsn_pg_postgres]
Bevor die ODBC-Konfiguration zum ersten Mal getestet werden kann, sollten Sie die folgenden Voraussetzungen prüfen:
Eine gute Wahl für ein einfaches odbc-fähiges Programm ist das Konsolen-Programm `isql`, das automatisch bei der Installation von UnixODBC mit installiert wurde.
Die Syntax: isql <DSN> <DB_User> [<DB_User_Password> ] ist einfach, wobei das Passwort optional ist und von der DSN-Definition abhängt.
Für den Test wurde in der Konfigurationsdatei ~/.odbc.ini die (System-)Datenbank `postgres` eingetragen, die aber nicht genutzt wird. Statt dessen wird nur die Version von PostgreSQL abgefragt. Die Kenntnis der Version ist hier zweitrangig, weil es nur um den Test ging, sich erfolgreich über das obdc-fähige Client-Programm isql mit einer PostgreSQL-Datenbank zu verbinden:
hans@mint20:~$ isql -m47 dsn_pg_postgres postgres +---------------------------------------+ | Connected! | | sql-statement | | help [tablename] | | quit | +---------------------------------------+ SQL> SELECT version(); +------------------------------------------------+ | version | +------------------------------------------------+ | PostgreSQL 12.6 (Ubuntu 12.6-0ubuntu0.20.04.1) | +------------------------------------------------+ SQLRowCount returns 1 1 rows fetched SQL> quit hans@mint20:~$
Fazit: Der Test verlief erfolgreich!