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
Server Die TCP/IP-Adresse oder der Host-Name 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
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.
CharacterSet Der Standardzeichensatz für die Verbindung. Einzelheiten finden Sie im Kapitel Character Set Support (EN). WIN1251
LoginTimeout Steuert die Dauer in Sekunden bis zur Zeitüberschreitung einer Anwendung beim Versuch, eine Verbindung herzustellen. 30
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 die beschränkten Informationen über die 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 Setzen von MetaDefSchema wird der aktuelle Schemasuchpfad in der PostgreSQL-Sitzung nicht geändert. "public" ist der Vorgabewert. MySchema
GUIDEndian Definiert, wie der GUID-Wert auf dem Client repräsentiert wird. "Little" ist der Vorgabewert. Big

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