Connexion à PostgreSQL (FireDAC)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Connectivité des bases de données (FireDAC)

Cette rubrique explique comment établir la connexion à PostgreSQL.

Versions prises en charge

Le pilote natif FireDAC supporte le serveur PostgreSQL et PostgreSQL Advanced version 7.4 et ultérieure, car il requiert une connexion à l'aide du protocole PG 3.0.

Logiciel client

Logiciel client Windows

FireDAC requiert la bibliothèque client LIBPQ.DLL x86 ou x64 pour se connecter au serveur PostgreSQL. L'utilisation de libpq.dll requiert aussi que le package redistribuable Microsoft Visual C++ 2010 soit installé. Vous pouvez obtenir ce package depuis http://www.microsoft.com/en-us/download/details.aspx?id=8328. Dans l'idéal, la version de libpq.dll doit être équivalente à celle du serveur. L'ensemble complet des fichiers client de la version 9.0 :

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

Vous pouvez les extraire du dossier Bin ou Lib d'installation du serveur (informations détaillées) et les placer dans :

  • un dossier inclus dans votre variable d'environnement PATH.
  • le dossier EXE de votre application.

Sinon, vous pouvez placer les fichiers nécessaires dans tout autre doisser et spécifier leur chemin d'accès dans FDDrivers.ini :

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

Si la bibliothèque client PostgreSQL n'a pas été installée correctement, une exception est déclenchée quand vous essayez de vous connecter :

[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.


ou

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

Logiciel client OS X

FireDAC requiert :

  • la bibliothèque client libpq.dylib x86.

Elle est pré-installée sous OS X ou peut être installée séparément (davantage d'informations (EN)).

Logiciel client iOS

L'article (davantage d'informations) explique comment construire libpq.dylib pour iOS.

Notez que Embarcadero Technologies n'a pas testé ce produit et ne fournit aucune assistance pour lui.

Logiciel client Linux

Pour installer la bibliothèque client PostgreSQL :

  1. Sur Ubuntu Server 16.04 LTS, exécutez :
    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. Sur Red Hat Enterprise Linux 7, exécutez :
    sudo yum install postgresql-libs
    sudo ln -s /usr/lib64/libpq.so.5 /usr/lib64/libpq.so
    

Liaison du pilote

Pour lier le pilote :

Autres paramètres

Si une application utilise la fonction d'échappement {TIMESTAMPDIFF(MONTH, ....)}, nous vous recommandons de créer trois fonctions PostgreSQL avec les types d'arguments suivants :

  • DATE
  • TIMESTAMP
  • TIMESTAMP WITH TIME ZONE.

Le modèle de fonction :

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;

Paramètres de définition de la connexion

Pour se connecter à un SGBD PostgreSQL, la plupart des applications vous demandent de spécifier DriverID', Server, Database, User_Name, Password et CharacterSet'. Pour plus de détails, voir Définition d'une connexion (FireDAC).

DriverID=PG

Paramètre Description Valeur exemple
Pooled Active le pooling de connexion pour cette définition de connexion. La valeur par défaut est False. Pour utiliser une connexion mise en pool, la définition de connexion doit être persistante ou privée. True
Database Nom de la base de données en cours pour la connexion. Si ce paramètre n'est pas spécifié, aucune base de données n'est configurée. MyDB
User_Name ID utilisateur PostgreSQL. postgres
Password Mot de passe utilisateur PostgreSQL.
MonitorBy Spécifie la sortie moniteur (la sortie de suivi) pour cette définition de connexion. L'une des valeurs suivantes peut être spécifiée :
  • FlatFile. La sortie de suivi est envoyée dans un fichier texte. Pour activer ce mode de fonctionnement, incluez TFDMoniFlatFileClientLink dans votre application et définissez sa propriété Tracing sur True. FireDAC affiche le nom d'un fichier de suivi à la fin d'une application.
  • Remote. La sortie de suivi est envoyée dans l'utilitaire FDMonitor pour vous aider à surveiller votre application. Pour activer ce mode de fonctionnement, incluez TFDMoniRemoteClientLink dans votre application et définissez sa propriété Tracing sur True. FDMonitor doit être exécuté avant l'établissement de la connexion.
  • Custom. La sortie de suivi est envoyée dans le gestionnaire d'événement TFDMoniCustomClientLink.OnOutput. Pour activer ce mode de fonctionnement, incluez TFDMoniCustomClientLink dans votre application et définissez sa propriété Tracing sur True.
FlatFile
Server Adresse TCP/IP ou nom d'hôte du serveur exécutant un serveur PostgreSQL. 127.0.0.1
Port Port TCP/IP sur lequel le serveur PostgreSQL écoute. 5432
LoginTimeout Contrôle la durée, en secondes, s’écoulant avant qu'une application dépasse le temps imparti pour établir la connexion. 30
CharacterSet Jeu de caractères par défaut de la connexion. Pour plus de détails, voir Character Set Support (EN). WIN1251
ExtendedMetadata

Contrôle la description étendue des ensembles de résultats d'une requête :

  • True - FireDAC décrit un ensemble de résultats pour obtenir tous les attributs de colonnes possibles (initialisable, incrémentation automatique, domaine auquel il appartient, etc.). Définir cette option sur True ralentit légèrement l'ouverture d'un ensemble de données.
  • False - FireDAC utilise les informations restreintes sur les colonnes de la requête (par défaut).
False
OidAsBlob

Contrôle l'interprétation d'une colonne OID dans une table :

  • No - une colonne OID est une colonne dtUInt32 (contient des entiers non signés).
  • Yes - une colonne OID est une colonne dtHBlob (contient des valeurs Large Object).
  • Choose - si une requête sélectionne des données des tables du dictionnaire ou une colonne qui n'est pas un domaine LO, LargeObject ou BLOB, alors une colonne OID est une colonne dtUInt32 ; sinon, c'est une colonne dtHBlob. L'option ExtendedMetadata doit avoir la valeur True pour obtenir un domaine de colonne (par défaut).
Yes
UnknownFormat

Contrôle la gestion d'un type de données PostgreSQL inconnu :

  • Error - déclenche l'exception "Cannot describe type" (par défaut).
  • BYTEA - représente une valeur BLOB.
BYTEA
ArrayScanSample Détermine si des tableaux soumis à des contraintes sont mappés en ftArray ou ftDataSet.

Pour spécifier le paramètre de connexion, utilisez ArrayScanSample=<RowsToScan>[;<DefaultArraySize>]. Il est effectué comme suit :

  • Si spécifié, FireDAC analyse les champs de type tableau PostgreSQL pour obtenir leurs contraintes et les définir sous forme de ftArray. D'abord, FireDAC analyse les lignes <RowsToScan> pour obtenir la taille du tableau. Si toutes les lignes ont la valeur NULL ou tableau vide pour le champ tableau, FireDAC utilise <DefaultArraySize> comme taille du tableau par défaut. La valeur par défaut est 5.
  • Sinon, les champs seront définis sous forme de ftDataSet, y compris quand :
    • ArrayScanSample n'est pas spécifié (valeur par défaut).
    • ArrayScanSample est spécifié, mais la valeur de <RowsToScan> est zéro.
    • ArrayScanSample est spécifié, mais la taille tu tableau spécifié est zéro.
ApplicationName Nom de l'application. Si cette valeur est spécifiée, elle est stockée dans la table pg_stat_activity, colonne application_name. AllBooks
PGAdvanced Autres options de connexion au serveur PostgreSQL. Pour plus de détails, voir Database Connection Control Functions (EN), paragraphe PQconnectdb. La valeur a pour format - <option>=<valeur>[;...].
MetaDefSchema Nom du schéma par défaut. En mode conception, le code exclut le nom du catalogue du nom de l'objet, s'il est égal à MetaDefSchema. Le fait de définir MetaDefSchema ne change pas le chemin de recherche du schéma actuel dans la session PostgreSQL. La valeur par défaut est "public". MySchema
MetaCurSchema Spécifie le schéma en cours pour l'application. S'il n'est pas spécifié, sa valeur est envoyée par le SGBD. Si une application demande des métadonnées et que vous ne spécifiez pas de nom de schéma, FireDAC utilise implicitement le schéma en cours. Si MetaCurSchema vaut '*', le nom de schéma est omis des paramètres de métadonnées. *
GUIDEndian Définit comment la valeur GUID est représentée sur le client. 'Little' est la valeur par défaut. Big
FastFetchMode Extrait l'objectif d'optimisation des enregistrements :
  • Choose - laisse FD choisir l'optimisation recherchée. C'est la valeur par défaut.
  • Default - FD n'effectue pas d'optimisation. C'est le mode activé avant la modification.
  • All - FD optimise toujours l'extraction des résultats pour terminer la collecte de tous les enregistrements.
  • First - FD optimise toujours l'extraction des résultats pour terminer la collecte du premier enregistrement.
All

Exemples d'utilisation

  • Connexion à un serveur exécuté localement, écoutant sur le port par défaut (5432) :


DriverID=PG
Database=addemo
  • Connexion à un serveur distant, écoutant sur un port autre que le port par défaut, en utilisant Unicode pour les données des caractères :


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

Voir aussi