Herstellen einer Verbindung zu PostgreSQL (FireDAC)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Datenbankkonnektivität (FireDAC)

In diesem Thema wird beschrieben, wie eine Verbindung zu PostgreSQL hergestellt wird.

Unterstützte Versionen

Der native FireDAC-Treiber unterstützt PostgreSQL Server und PostgreSQL Advanced Version 7.4 und höher, da für diese eine PG-Protokoll 3.0-Verbindung erforderlich ist.

Client-Software

Windows-Client-Software

FireDAC benötigt die x86- oder x64-Client-Bibliothek LIBPQ.DLL, um eine Verbindung zum PostgreSQL-Server herzustellen. Für die Verwendung von libpq.dll ist auch die Installation von "Microsoft Visual C++ 2010 Redistributable Package" erforderlich. Sie können dieses Packet von http://www.microsoft.com/de-de/download/details.aspx?id=8328 (EN) herunterladen. Idealerweise sollte die libpq.dll-Version mit der Serverversion übereinstimmen. Die Client-Dateien der Version 9.0:

  • libpq.dll
  • ssleay32.dll
  • libeay32.dll
  • libintl-8.dll
  • libiconv-2.dll

Sie können diese Bibliotheken aus dem Ordner "Bin" der Serverinstallation (Details (EN)) übernehmen und in einen der folgenden Ordner kopieren:

  • Einen in der Umgebungsvariable PATH aufgeführten Ordner.
  • Ihren Anwendungs-EXE-Ordner.

Alternativ können Sie die benötigten Dateien in jeden anderen Ordner kopieren und deren Pfad in FDDrivers.ini angeben:

[PG]
VendorLib=<folder>\libpq.dll

Wenn die PostgreSQL-Client-Bibliothek nicht korrekt installiert wurde, wird eine Exception ausgelöst, wenn Sie versuchen eine Verbindung herzustellen:

[FireDAC][Phys][PGSQL]-314. Cannot load vendor library [LIBPQ.DLL]. The specified module could not be found. Check [LIBPQ.DLL], which is located in one of the PATH directories or in application EXE directory.

oder

The ordinal Nnn could not be located in the dynamic link library SSLEAY32.dll.

OS X-Client-Software

FireDAC benötigt:

  • die x86-Client-Bibliothek libclibpq.dylib.

Diese Bibliothek ist auf OS X vorinstalliert oder kann separat installiert werden (weitere Informationen (EN)).

iOS-Client-Software

Im Artikel (Weitere Informationen (EN)) wird beschrieben, wie libpq.dylib für iOS erzeugt wird.

Beachten Sie bitte, dass dies von Embarcadero Technologies nicht getestet wurde und Embarcadero Technologies dafür auch keine Unterstützung bietet.

Linux-Client-Software

Um die PostgreSQL-Client-Bibliothek zu installieren:

  1. Auf Ubuntu Server 16.04 LTS, führen Sie aus:
    sudo apt-get install libpq5
    sudo ln -s /usr/lib/x86_64-linux-gnu/libpq.so.5 /usr/lib/x86_64-linux-gnu/libpq.so
    
  2. Auf Red Hat Enterprise Linux 7, führen Sie aus:
    sudo yum install postgresql-libs
    sudo ln -s /usr/lib64/libpq.so.5 /usr/lib64/libpq.so
    

Treibereinbindung

So binden Sie den Treiber ein:

Zusatzkonfiguration

Wenn eine Anwendung die Escape-Funktion {TIMESTAMPDIFF(MONTH, ....)} verwendet, dann wird die Erstellung von 3 PostgreSQL-Funktionen mit den folgenden Argumenttypen empfohlen:

  • DATE
  • TIMESTAMP
  • TIMESTAMP WITH TIME ZONE

Die Funktionsvorlage:

CREATE OR REPLACE FUNCTION MONTHS_BETWEEN (timestamp with time zone, timestamp with time zone) RETURNS integer AS
$body$
DECLARE
  mes INTEGER;
  mes1 INTEGER;
  ano INTEGER;
begin
  mes=extract(month from (age($1,$2)));
  ano=extract(year from (age($1,$2)));
  mes1=abs((ano*12) + mes);
  return mes1;
end
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

Verbindungsdefinitionsparameter

Um eine Verbindung mit einem PostgreSQL-DBMS herzustellen, müssen Sie für die meisten Anwendungen DriverID, Server, Database, User_Name, Password und CharacterSet angeben (weitere Informationen finden Sie unter Definieren von Verbindungen (FireDAC)).

DriverID=PG

Parameter Beschreibung Beispielwert
Im Pool zusammengefasst Ermöglicht Verbindungs-Pooling für diese Verbindungsdefinition. Der Vorgabewert ist False. Um in einen Pool gestellte Verbindungen zu verwenden, muss die Verbindungsdefinition persistent oder privat sein. True
Database Name der aktuellen Datenbank für die Verbindung. Wenn "Database" nicht angegeben ist, wird keine aktuelle Datenbank eingerichtet. MyDB
User_Name Die PostgreSQL-Benutzer-ID. postgres
Password Das PostgreSQL-Benutzerpasswort.
MonitorBy Gibt die Ablaufverfolgungs-/Überwachungsausgabe für diese Verbindungsdefinition an. Es kann einer der folgenden Werte angegeben werden:
  • FlatFile. Die Ablaufverfolgungsausgabe wird an eine Textdatei gesendet. Schließen Sie dazu TFDMoniFlatFileClientLink in Ihre Anwendung ein und legen Sie die Eigenschaft Tracing auf True fest. FireDAC zeigt den Namen der Ablaufverfolgungsdatei nach Beendigung der Anwendung an.
  • Remote. Die Ablaufverfolgungsausgabe wird an das Hilfsprogramm FDMonitor gesendet, um Sie bei der Überwachung der Anwendung zu unterstützen. Schließen Sie dazu TFDMoniRemoteClientLink in Ihre Anwendung ein und legen Sie die Eigenschaft Tracing auf True fest. FDMonitor muss ausgeführt werden, bevor die Verbindung eingerichtet wird.
  • Custom. Die Ablaufverfolgungsausgabe wird an die Ereignisbehandlungsroutine TFDMoniCustomClientLink.OnOutput gesendet. Schließen Sie dazu TFDMoniCustomClientLink in Ihre Anwendung ein und legen Sie die Eigenschaft Tracing auf True fest.
FlatFile
Server Die TCP/IP-Adresse oder der Hostname des Servers, auf dem ein PostgreSQL-Server ausgeführt wird. 127.0.0.1
Port Der TCP/IP-Port, über den der PostgreSQL-Server empfängt. 5432
LoginTimeout Steuert die Dauer in Sekunden bis zur Zeitüberschreitung einer Anwendung beim Versuch, eine Verbindung herzustellen. 30
CharacterSet Der Standardzeichensatz für die Verbindung. Einzelheiten finden Sie im Kapitel Character Set Support (EN). WIN1251
ExtendedMetadata

Steuert die erweiterte Beschreibung von Abfrage-Ergebnismengen:

  • True – FireDAC beschreibt eine Ergebnismenge, um alle möglichen Spaltenattribute abzurufen - Null akzeptieren, wird automatisch inkrementiert, Domänenzugehörigkeit usw. Durch Setzen dieser Option auf True wird das Öffnen von Datenmengen geringfügig verlangsamt.
  • False – FireDAC verwendet eingeschränkte Informationen zu den Abfragespalten (Vorgabe).
False
OidAsBlob

Steuert die Interpretation einer OID-Spalte in einer Tabelle:

  • No – eine OID-Spalte ist eine dtUInt32-Spalte (enthält Integerwerte ohne Vorzeichen).
  • Yes – eine OID-Spalte ist eine dtHBlob-Spalte (enthält Large Object-Werte).
  • Choose – wenn eine Abfrage Daten aus den Dictionary-Tabellen oder aus einer Spalte auswählt, die keiner LO-, LargeObject- oder BLOB-Domäne angehören, dann ist eine OID-Spalte eine dtUInt32-Spalte, ansonsten eine dtHBlob-Spalte. Die Option "ExtendedMetadata" muss True sein, damit eine Spaltendomäne abgerufen werden kann (Vorgabe).
Yes
UnknownFormat

Steuert die Behandlung eines unbekannten PostgreSQL-Datentyps:

  • Error – löst die Exception "Typ kann nicht beschrieben werden" aus (Vorgabe).
  • BYTEA – wird als BLOB-Wert dargestellt.
BYTEA
ArrayScanSample Legt fest, ob die eingeschränkten Arrays zu ftArray oder ftDataSet zugeordnet werden.

Verwenden Sie ArrayScanSample=<RowsToScan>[;<DefaultArraySize>], um diesen Verbindungsparameter zu definieren. Es funktioniert wie folgt:

  • Wenn angegeben analysiert FireDAC die Array-artige Felder von PostgreSQL, um ihre Einschränkungen zu ermitteln und sie als ftArray zu definieren. FireDAC scannt zuerst die <RowsToScan>-Zeilen, um die Größe des Arrays zu ermitteln. Wenn alle Zeilen NULL-Wert oder ein leeres Array für das Array-Feld haben, verwendet FireDAC <DefaultArraySize> als die Standardgröße des Arrays. Der Standardwert ist 5.
  • Ansonsten werden die Felder als ftDataSet definiert, zum Beispiel wenn:
    • ArrayScanSample nicht angegeben wird (standard).
    • ArrayScanSample angegeben wird aber <RowsToScan> null ist.
    • ArrayScanSample angegeben wird aber die Größe des ausgewerteten Array null ist.
ApplicationName Name der Anwendung. Wenn angegeben, wird dieser Wert in der Tabelle pg_stat_activity in der Spalte application_name gespeichert. AllBooks
PGAdvanced Zusätzliche PostgreSQL-Serververbindungsoptionen. Einzelheiten hierzu finden Sie im Absatz "PQconnectdb" des Kapitels Database Connection Control Functions (EN). Ein Wertformat ist – <Option>=<Wert>[;...].
MetaDefSchema Standardschemaname. Im Entwurfszeitcode wird der Katalogname im Objektnamen weggelassen, wenn er MetaDefSchema entspricht. Durch Festlegen von MetaDefSchema wird der aktuelle Schemasuchpfad in der PostgreSQL-Sitzung nicht geändert. "public" ist der Vorgabewert. MySchema
MetaCurSchema Gibt das aktuelle Schema für die Anwendung an. Wenn es nicht angegeben ist, dann wird der Wert vom DBMS ermittelt. Wenn eine Anwendung Metadaten anfordert, und Sie keinen Schemanamen angeben, dann verwendet FireDAC implizit das aktuelle Schema. Wenn MetaCurSchema '*' ist, dann wird der Schemaname in den Metadatenparametern weggelassen. *
GUIDEndian Definiert, wie der GUID-Wert auf dem Client repräsentiert wird. "Little" ist der Vorgabewert. Big
FastFetchMode Ruft das Optimierungsziel der Datensätze ab:
  • Choose – FD wählt das geeignete Optimierungsziel aus. Das ist der Vorgabewert.
  • Default – FD führt keine Optimierung durch. Dies ist der Modus vor der Änderung.
  • All – FD optimiert das Abrufen von Ergebnismengen immer, um das Erfassen aller Datensätze zu beenden.
  • First – FD optimiert das Abrufen von Ergebnismengen immer, um das Erfassen des ersten Datensatzes zu beenden.
All

Anwendungsfälle

  • Herstellen einer Verbindung zu einem lokal ausgeführtem Server, der über den Standard-Port (5432) empfängt:


DriverID=PG
Database=addemo
  • Herstellen einer Verbindung zu einem Remote-Server, der nicht über den Standard-Port empfängt, unter Verwendung von Unicode für Zeichendaten:


DriverID=PG
Server=pgsrv
Port=5433
Database=addemo
CharacterSet=utf8
MetaDefSchema=MySchema
ExtendedMetadata=True

Siehe auch