Difference between revisions of "postgres/fr"

From Free Pascal wiki
Jump to navigationJump to search
(Created page with "{{postgres}} {{Infobox databases/fr}} == Vue d'ensemble == You can use Free Pascal/Lazarus to access a PostgreSQL database server. If you are looking for information on the...")
 
m (Fixed syntax highlighting)
 
(13 intermediate revisions by one other user not shown)
Line 4: Line 4:
  
 
== Vue d'ensemble ==  
 
== Vue d'ensemble ==  
You can use Free Pascal/Lazarus to access a PostgreSQL database server. If you are looking for information on the ''postgres'' package in FPC, please see [[postgres#PostgreSQL_package:_the_low_level_units]] below.
+
Vous pouvez utiliser Free Pascal/Lazarus pour accéder à un serveur de base de données PostgreSQL. Si vous cherchez de l'information sur le paquet ''postgres'' dans FPC, veuillez consulter [[#Paquet PostgreSQL : les unités de bas-niveau]] plus bas.
  
Advantages of PostgreSQL:
+
Avantages de PostgreSQL:
* It is very widely used and available
+
* Il est disponible et largement utilisé
* Very stable and has a complete feature set
+
* Très stable et a un ensemble complet de fonctionnalités.
* Liberal license (no costs) in comparison with MySQL
+
* Licence libérale (sans frais) par rapport à MySQL.
  
Disadvantage of PostgreSQL:
+
Inconvénient de PostgreSQL:
* Some hosters may not offer PostgreSQL)
+
* Certains hébergeurs peuvent ne pas offrir PostgreSQL
* No embedded version
+
* Pas de version incorporée (i.e. sans serveur distant/installé, comme Firebird le propose)
  
Win64: please see warning [[Windows Programming Tips#FPC 2.6.x/Lazarus warning|here]] on not using certain FPC/Lazarus Win64 versions.
+
Win64: SVP, consulter l'avertissement [[Windows Programming Tips/fr#Avertissement sur FPC 2.6.x/Lazarus (support manquant pour SEH)|ici]] sur l'inutilisation de certaines versions de FPC/Lazarus Win64.
  
 
== Accès direct à PostgreSQL ==
 
== Accès direct à PostgreSQL ==
You can connect Lazarus with PostgreSQL by using PostgreSQL Data Access Components (PgDAC).
+
Vous pouvez vous connecter à PostgreSQL avec Lazarus en utilisant les composants PostgreSQL Data Access (PgDAC).
It is a library of components that provides native connectivity to PostgreSQL from Lazarus (and Free Pascal) on Windows, Mac OS X, iOS, Android, Linux, and FreeBSD for both 32-bit and 64-bit platforms. PgDAC is designed to help programmers develop really lightweight, faster and cleaner PostgreSQL database applications without deploying any additional libraries.
+
C'est une bibliothèque de composants qui fournissent une connectivité native à PostgreSQL depuis Lazarus (et Free Pascal) sur Windows, Mac OS X, iOS, Android, Linux et FreeBSD pour les plates-formes 32-bit et 64-bit. PgDAC est conçue pour aider le programmeur à développer des applications PostgreSQL réellement légères, rapides et propres sans déploiement de bibliothèques supplémentaires.
  
You can download this [https://www.devart.com/pgdac/download.html Lazarus component] for free.
+
Vous pouvez la télécharger librement depuis [https://www.devart.com/pgdac/download.html Composants Lazarus].
  
 
==Zeos==
 
==Zeos==
Zeos supports PostgreSQL; please see [[ZeosDBO]]
+
Zeos prend en charge PostgreSQL ; veuillez lire [[ZeosDBO/fr|ZeosDBO]].
  
 
==SQLDB==
 
==SQLDB==
FPC/Lazarus supports PostgreSQL out of the box with a PostgreSQL connection component/class. If you are using FPC only or want to manually add PostgreSQL support, add ''pqconnection'' to your ''uses'' clause. Otherwise, Lazarus provides a component:
+
FPC / Lazarus prend en charge PostgreSQL avec un composant/classe de connexion PostgreSQL. Si vous utilisez FPC seulement ou voulez ajouter manuellement la prise en charge de PostgreSQL, ajoutez ''pqconnection'' à votre clause ''uses''. Autrement, Lazarus fournit le composant :
  
 
[[Image:sqldbcomponents.png‎]]
 
[[Image:sqldbcomponents.png‎]]
  
'''Note:''' The libpq C client contains some memory leaks (at least up till version 9.3 of Postgres) when a library is repeatedly loaded/unloaded.
+
'''Note :''' la bibliothèque cliente C libpg contient quelques fuites de mémoires (au moins jusqu'à la version 9.3 de Postgres) quand une bibliothèque est chargée/déchargée de manière répétitive. SQLdb charge la bibliothèque à la première connexion, et la décharge à la dernière. Cela signifie que chaque fois que la dernière connexion est fermée, une petite fuite de mémoire est créée. Pour empêcher cela d'arriver (et accélérer l'application), vous pouvez charger le, vous pouvez charger la bibliothèque une fois au démarrage du processus avec l'appel à InitialisePostgres3.
SQLDB loads the library when the first connection is made, and unloads it when the last connection closes. This means that whenever the last
 
connection is closed, a small memory leak is created. To prevent this from happening (and speed up the application), you can load the
 
library once at the start of the process with the InitialisePostgres3 call.
 
  
The charset property is used for client encoding.
+
La propriété charset est utilisée pour l'encodage du client.
  
The TPQConnection component does not directly support a Port property, but one can pass the port into the component via the Params parameter:
+
Le composant TPQConnection ne prend pas en charge directement une propriété Port, on peut passer le port dans le composant via le paramètre Params :  
  
<syntaxhighlight>PQConnection.Params.Add('port=' + VariableContainingPort);</syntaxhighlight>
+
<syntaxhighlight lang=pascal>PQConnection.Params.Add('port=' + VariableContainingPort);</syntaxhighlight>
  
Other PostgreSQL specific connection parameters can be specified using the Params property:
+
D'autres paramètres de connexion particuliers peuvent être spécifiés en utilisant la propriéét Params :
<syntaxhighlight>PQConnection.Params.Add('application_name=''yourappname''')</syntaxhighlight>
+
 
 +
<syntaxhighlight lang=pascal>PQConnection.Params.Add('application_name=''yourappname''')</syntaxhighlight>
  
 
===Exemple===
 
===Exemple===
See [[SQLdb_Tutorial1]] for a tutorial on creating a GUI database-enabled program that is written for PostgreSQL/SQLDB, as well as SQLite/SQLDB, Firebird/SQLDB, basically any RDBMS SQLDB supports).
+
Voir [[SQLdb_Tutorial1/fr|Tutoriel SQLdb 1]] pour un tutoriel sur la création d'une application de base de données avec IHM écrite avec PostgreSQL/SQLdb, aussi bien qu'avec SQLite/SQLDB, Firebird/SQLDB ou basiquement avec toute base de données prise en charge par SQLDB.
  
 
=== Surveillance des événements ===
 
=== Surveillance des événements ===
If you have FPC2.6.2+ and a recent version of Lazarus, you can use the '''TPQTEventMonitor''' component to monitor events coming from PostgreSQL.  
+
Si vous avez FPC 2.6.2+ et une version récente de Lazarus, vous pouvez utiliser le composant '''TPQTEventMonitor''' pour surveiller les événements venant de PostgreSQL.
  
It is a thin wrapper around FPC '''PQEventMonitor'''; please see the FPC pqeventstest.pp example programs for details.
+
C'est une enveloppe mince autour de FPC '''PQEventMonitor''' ; veuillez consulter le programme exemple FPC pqeventstest.pp pour les détails.
  
 
=== Installation et erreurs ===
 
=== Installation et erreurs ===
As with all sqldb units, you need to add your driver libraries ('''all''' required PostgreSQL .dll/.manifest files)
+
Comme pour toutes les unités SQLdb, vous avez besoin de vos bibliothèque cliente ('''tous''' les fichiers PostgreSQL .dll/.manifest)
* to a directory in the (library search) path (e.g. c:\windows\system32 for Windows)
+
* dans une dossier dans le chemin (de recherche des bibliothèques, tel que c:\windows\system32 pour Windows)
* or (Windows) to the program output directory (e.g. lib/something/ in your project directory, and the project directory
+
* ou (pour Windows) dans le dossier de votre programme (p.ex. lib\something\ dans votre dossier de projet et le
  
 
==== Pilote Windows 64 bit ====
 
==== Pilote Windows 64 bit ====
If you are developing 64 bit applications, you must use a 64 bit DLL.
+
Pour développer une application 64 bit, vous devez utiliser une DLL 64 bit (remarque générale).
  
{{Note|FPC 2.6.0 (therefore Lazarus 1.0.4 or lower) does not yet support PostgreSQL on Windows 64 bit (unless you patch and recompile it).}}
+
{{Note|FPC 2.6.0 (et donc Lazarus 1.0.4 ou antérieur) ne supporte pas PostgreSQL sur Windows 64 bit (à moins de le corriger et le recompiler).}}
  
A Windows 64 driver is fairly hard to find but can be downloaded here: [http://www.enterprisedb.com/products-services-training/pgdownload#windows].
+
Un pilote Windows 64 bit est franchement difficile à trouver mais peut être téléchargé ici : [http://www.enterprisedb.com/products-services-training/pgdownload#windows].
The driver library can be installed in c:\windows\system32; 32 bit driver libraries can be installed in the confusingly named c:\windows\syswow64
+
La bibliothèque du pilote peut être installée dans c:\windows\system32 ; les bibliothèques du pilote 32 bit peuvent être installées dans le maladroitement nommé c:\windows\syswow64.
  
 
==== Erreur: "Can not load PostgreSQL client library "libpq.dll"" ====
 
==== Erreur: "Can not load PostgreSQL client library "libpq.dll"" ====
The program cannot find your PostgreSQL driver files.
+
Le programme ne peut pas trouver les fichiers du pilote PostgreSQL.
  
See above on instructions where to install the libraries.
+
Voir ci-dessus pour les instructions d'installation des bibliothèques.
  
A good example that demonstrates how to include drive DLL files when connecting Lazarus with PostgreSQL under Windows is [http://paginas.fe.up.pt/~asousa/wiki/doku.php?id=proj:lazarus_projects#easy_db easyDB].
+
Un bon exemple qui démontre comment inclure les fichiers DLL du pilote en connectant Lazarus avec PostgreSQL sous Windows est [http://paginas.fe.up.pt/~asousa/wiki/doku.php?id=proj:lazarus_projects#easy_db easyDB].
  
On Linux/Unix/OSX: make sure the PostgreSQL libraries are in your library search path, e.g.:
+
Sur Linux/Unix/OSX, assurez-vous que les bibliothèques PostgreSQL sont dans le chemin de recherche des bibliothèques, i.e. :
* On Linux add the path to the libpq.so file to the libraries section in your /etc/fpc.cfg file. For example : -Fl/usr/local/pgsql/lib
+
* Sur Linux, ajouter le chemin vers le fichier libpq.so vers la section libraries dans votre fichier /etc/fpc.cfg. P. ex. : -Fl/usr/local/pgsql/lib.
* It may be necessary to create a symbolic link from a specific library version to a general library name: <syntaxhighlight lang="bash">ln -s /usr/lib/pqsql.so.5 /usr/lib/pqsql.so</syntaxhighlight>. Alternatively, install the postgresql client -dev package using your distribution's package manager
+
* Il peut être nécessaire de créer un lien symbolique depuis une version spécifique de la bibliothèque vers un nom général de bibliothèque : <syntaxhighlight lang="bash">ln -s /usr/lib/pqsql.so.5 /usr/lib/pqsql.so</syntaxhighlight>
 +
De manière alternative, installez le paquet -dev du client postgresql en utilisant le gestionnaire de paquets de votre distribution.
  
 
==== Problèmes de nettoyage des paramètres ====
 
==== Problèmes de nettoyage des paramètres ====
{{Note|Verify this: is .paramtype really necessary?}}
+
{{Note|Vérifiez ceci : est-ce que .paramtype est réellement nécessaire ?}}
At least in FPC <= 2.6.2: if you .Clear a parameter (i.e. set it to NULL), PostgreSQL may have difficulty recognizing the parameter type.
+
Au moins dans FPC <= 2.6.2 : si vous effacez (.clear) un paramètre (i.e. le mettre à NULL), PostgreSQL pourrait avoir des difficultés à reconnaître le type du paramètre.
  
In that case, explicitly specify the type, e.g.:
+
Dans ce cas, spécifiez explicitement le type, p.ex. :
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
FWriteQuery.Params.ParamByName('LONGITUDE').ParamType:=ptInput; //required for postgresql
 
FWriteQuery.Params.ParamByName('LONGITUDE').ParamType:=ptInput; //required for postgresql
 
FWriteQuery.Params.ParamByName('LONGITUDE').Clear
 
FWriteQuery.Params.ParamByName('LONGITUDE').Clear
Line 90: Line 89:
 
=== Utiliser INSERT RETURNING ===
 
=== Utiliser INSERT RETURNING ===
 
==== Obtenir le dernier ID inséré ====
 
==== Obtenir le dernier ID inséré ====
With PostGres there is no need to run a second query to get the last inserted ID.
+
Avec PostGres, il n'est pas nécessaire d'exécuter une seconde requête pour obtenir le dernier ID inséré.
  
Use INSERT RETURNING and read the value:
+
Utilisez INSERT RETURNING et lisez la valeur :
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
var  
 
var  
 
   ID: Integer
 
   ID: Integer
Line 104: Line 103:
  
 
==== Obtenir des champs multiples et des expressions ====
 
==== Obtenir des champs multiples et des expressions ====
RETURNING in PostgreSQL is more flexible than most database engines. It works with INSERT, UPDATE, and DELETE statements and can be any list of fields, constants, or expressions that would be found in a SELECT list.
+
RETURNING dans PostgreSQL est plus flexible que dans la plupart des SGBDR. Il marche avec les ordres INSERT, UPDATE et DELETE et peut être n'importe quelle liste de champs, constantes ou expression qui pourrait être renvoyée par un SELECT.
 
<syntaxhighlight lang="SQL">
 
<syntaxhighlight lang="SQL">
 
INSERT INTO films (film_name) VALUES ('val') RETURNING film_id;  -- Returns id's for newly created rows.
 
INSERT INTO films (film_name) VALUES ('val') RETURNING film_id;  -- Returns id's for newly created rows.
Line 118: Line 117:
 
DELETE FROM films RETURNING *;  -- Returns all fields of deleted rows. </syntaxhighlight>
 
DELETE FROM films RETURNING *;  -- Returns all fields of deleted rows. </syntaxhighlight>
  
RETURNING using fields, constants, and expressions:
+
RETURNING utilisant des champs, des constantes et des expressions :
 
<syntaxhighlight lang="SQL">
 
<syntaxhighlight lang="SQL">
 
INSERT INTO films (film_name) VALUES ('val') RETURNING id, 'a' AS a, id*2 AS doubled_id, CASE WHEN id > 100 THEN 'a' ELSE 'b' END AS foo;
 
INSERT INTO films (film_name) VALUES ('val') RETURNING id, 'a' AS a, id*2 AS doubled_id, CASE WHEN id > 100 THEN 'a' ELSE 'b' END AS foo;
Line 124: Line 123:
  
 
== Paquet PostgreSQL : les unités de bas-niveau ==
 
== Paquet PostgreSQL : les unités de bas-niveau ==
As with all databases, the SQLDB code depends on a lower level PostgreSQL specific unit that wraps around the PostgreSQL driver library (.so/.dll/.dylib). Normally, you would use the higher-level SQLDB code as it allows you to code more quickly, easily switch databases etc.
+
Comem dans  toutes les bases de données, le code SQLdb dépend de l'unité PostgreSQL spécifique de bas niveau qui enveloppe la bibliothèque du pilote PostgreSQL (.so/.dll/.dylib). Normalement vous pourriez utiliser le code SQLdb de haut niveau car il vous permet de coder plus rapidement et de basculer facilement entre les bases de données, etc.
  
Using this is very easy, all you need to do is compile some units, and use these units in your program. You need to specify the place of the PostgreSQL client Library (libpq) when compiling, and that is it.
+
Utiliser ceci est très facile, tout ce dont vous avez besoin est de compiler certaines unités, et d'utiliser ces unités dans votre programme. Vous avez besoin de spécifier l'emplacement de la bibliothèque cliente de PostgreSQL (libpq) pour la compilation et c'est tout.
  
The main unit is called '''postgres''', normally this is the only unit you must include in your uses clause.  
+
L'unité principale est appelée '''postgres''', normalement c'est la seule unité que vous devez inclure dans votre clause uses.
  
 
=== Exigences ===
 
=== Exigences ===
You need at least version 0.99.5 of Free Pascal (basically any version of FPC except extremely old ones). The headers are translated from PostgreSQL version 6.3.1.
+
Vous avez besoin d'au moins la version 0.99.5 de Free Pascal (en pratique toute version de FPC wsauf les extrêmement plus anciennes). Les en-têtes sont traduits de PostgreSQL version 6.3.1.
  
 
=== Installation ===
 
=== Installation ===
The postgres unit comes with the Free Pascal packages, and is distributed together with the compiler. This contains a directory postgres with the units, a test program and a makefile. cd to the directory and edit the Makefile to set the variables for your system. You must provide only 1 thing:
+
L'unité postgres vient avec les paquets de Free Pascal et est distribuée avec le compilateur. Celui-ci contient un répertoire postgres avec les unités, un programme de test et un makefile. Accédez à ce répertoire et éditez le Makefile pour définir les variables pour votre système. Vous devez fournir seulement une chose :
  
# The directory where the libpq library resides, usually /usr/local/pgsql/lib  
+
# Le répertoire où la bibliothèque libpq réside, habituellement /usr/local/pgsql/lib.
  
Typing
+
En tapant :
  
 
  make
 
  make
  
Should compile the units and the program. If compilation was succesfull, you can install with
+
Cela devrait compiler les unités et le programme. Si la compilation a été réussie, vous pouvez installer en tapant :
  
 
  make install
 
  make install
  
(Remember to set the directory where the units should be installed.)
+
(Rappelez-vous que le répertoire où les unités devraient être installées.)
  
You can then test the program by running
+
Vous pouvez alors tester le programme en exécutant :
  
 
  make test
 
  make test
  
This will:
+
Cela :
 
+
* exécutera le programme de test testpg. Il s'agit d'une traduction directe d'un programme d'exemple du Guide du programmeur PostGreSQL.
* Run the test program testpg. It is a straightforward pascal translation of the example program in the PostGreSQL programmers' guide.
+
* exécutera un script pour créer une table dans la base de données et la remplir avec quelques données, pour cela, le chemin au programme psql doit être dans le PATH de votre système. Par défaut, le base de données utilisée est testdb.
* Run a script to create a table in a database, and fill it with some data. (the psql program should be in your PATH for this) . By default, the used database is testdb.
+
* exécutera le programme de test testemail
* Run the testprogram testemail
+
* lancera un script shell à nouveau pour effacer la table créée.
* Run a shell script again to remove the created table.  
 
  
You will see a lot of messages on your screen, giving you feedback and results. If something went wrong, make will inform you of this.
+
Vous verrez beaucoup de messages sur votre écran, vous donnant des retours d'information et des résultats. Si quelque chose ne va pas, Make vous en informera.
  
Go back to [[Package_List|Packages List]]
+
Aller vers [[Package_List/fr|Packages List]]
  
 
==Voir aussi==
 
==Voir aussi==
* [[TPSQL]] - A different set of PostgreSQL dataset/database components
+
* [[TPSQL/fr|TPSQL]] - Un ensemble de composants dataset/database pour PostgreSQL alternatif.
* [[Lazarus DB Faq]] - More about database programming
+
* [[Lazarus DB Faq/fr|Lazarus DB Faq]] - Plus d'info sur la programmation des SGBDR.
* [[Lazarus Database Tutorial]] - Getting Lazarus working with various databases
+
* [[Lazarus Database Tutorial/fr|Lazarus Database Tutorial]] - Faire travailler Lazarus avec diverses bases de données.
 +
<br/>

Latest revision as of 08:43, 23 February 2020

Deutsch (de) English (en) español (es) français (fr)

Portail de la base de données

Références:

Tutoriels/articles pratiques :

Bases de données

Advantage - MySQL - MSSQL - Postgres - Interbase - Firebird - Oracle - ODBC - Paradox - SQLite - dBASE - MS Access - Zeos

Vue d'ensemble

Vous pouvez utiliser Free Pascal/Lazarus pour accéder à un serveur de base de données PostgreSQL. Si vous cherchez de l'information sur le paquet postgres dans FPC, veuillez consulter #Paquet PostgreSQL : les unités de bas-niveau plus bas.

Avantages de PostgreSQL:

  • Il est disponible et largement utilisé
  • Très stable et a un ensemble complet de fonctionnalités.
  • Licence libérale (sans frais) par rapport à MySQL.

Inconvénient de PostgreSQL:

  • Certains hébergeurs peuvent ne pas offrir PostgreSQL
  • Pas de version incorporée (i.e. sans serveur distant/installé, comme Firebird le propose)

Win64: SVP, consulter l'avertissement ici sur l'inutilisation de certaines versions de FPC/Lazarus Win64.

Accès direct à PostgreSQL

Vous pouvez vous connecter à PostgreSQL avec Lazarus en utilisant les composants PostgreSQL Data Access (PgDAC). C'est une bibliothèque de composants qui fournissent une connectivité native à PostgreSQL depuis Lazarus (et Free Pascal) sur Windows, Mac OS X, iOS, Android, Linux et FreeBSD pour les plates-formes 32-bit et 64-bit. PgDAC est conçue pour aider le programmeur à développer des applications PostgreSQL réellement légères, rapides et propres sans déploiement de bibliothèques supplémentaires.

Vous pouvez la télécharger librement depuis Composants Lazarus.

Zeos

Zeos prend en charge PostgreSQL ; veuillez lire ZeosDBO.

SQLDB

FPC / Lazarus prend en charge PostgreSQL avec un composant/classe de connexion PostgreSQL. Si vous utilisez FPC seulement ou voulez ajouter manuellement la prise en charge de PostgreSQL, ajoutez pqconnection à votre clause uses. Autrement, Lazarus fournit le composant :

sqldbcomponents.png

Note : la bibliothèque cliente C libpg contient quelques fuites de mémoires (au moins jusqu'à la version 9.3 de Postgres) quand une bibliothèque est chargée/déchargée de manière répétitive. SQLdb charge la bibliothèque à la première connexion, et la décharge à la dernière. Cela signifie que chaque fois que la dernière connexion est fermée, une petite fuite de mémoire est créée. Pour empêcher cela d'arriver (et accélérer l'application), vous pouvez charger le, vous pouvez charger la bibliothèque une fois au démarrage du processus avec l'appel à InitialisePostgres3.

La propriété charset est utilisée pour l'encodage du client.

Le composant TPQConnection ne prend pas en charge directement une propriété Port, on peut passer le port dans le composant via le paramètre Params :

PQConnection.Params.Add('port=' + VariableContainingPort);

D'autres paramètres de connexion particuliers peuvent être spécifiés en utilisant la propriéét Params :

PQConnection.Params.Add('application_name=''yourappname''')

Exemple

Voir Tutoriel SQLdb 1 pour un tutoriel sur la création d'une application de base de données avec IHM écrite avec PostgreSQL/SQLdb, aussi bien qu'avec SQLite/SQLDB, Firebird/SQLDB ou basiquement avec toute base de données prise en charge par SQLDB.

Surveillance des événements

Si vous avez FPC 2.6.2+ et une version récente de Lazarus, vous pouvez utiliser le composant TPQTEventMonitor pour surveiller les événements venant de PostgreSQL.

C'est une enveloppe mince autour de FPC PQEventMonitor ; veuillez consulter le programme exemple FPC pqeventstest.pp pour les détails.

Installation et erreurs

Comme pour toutes les unités SQLdb, vous avez besoin de vos bibliothèque cliente (tous les fichiers PostgreSQL .dll/.manifest)

  • dans une dossier dans le chemin (de recherche des bibliothèques, tel que c:\windows\system32 pour Windows)
  • ou (pour Windows) dans le dossier de votre programme (p.ex. lib\something\ dans votre dossier de projet et le

Pilote Windows 64 bit

Pour développer une application 64 bit, vous devez utiliser une DLL 64 bit (remarque générale).

Light bulb  Remarque: FPC 2.6.0 (et donc Lazarus 1.0.4 ou antérieur) ne supporte pas PostgreSQL sur Windows 64 bit (à moins de le corriger et le recompiler).

Un pilote Windows 64 bit est franchement difficile à trouver mais peut être téléchargé ici : [1]. La bibliothèque du pilote peut être installée dans c:\windows\system32 ; les bibliothèques du pilote 32 bit peuvent être installées dans le maladroitement nommé c:\windows\syswow64.

Erreur: "Can not load PostgreSQL client library "libpq.dll""

Le programme ne peut pas trouver les fichiers du pilote PostgreSQL.

Voir ci-dessus pour les instructions d'installation des bibliothèques.

Un bon exemple qui démontre comment inclure les fichiers DLL du pilote en connectant Lazarus avec PostgreSQL sous Windows est easyDB.

Sur Linux/Unix/OSX, assurez-vous que les bibliothèques PostgreSQL sont dans le chemin de recherche des bibliothèques, i.e. :

  • Sur Linux, ajouter le chemin vers le fichier libpq.so vers la section libraries dans votre fichier /etc/fpc.cfg. P. ex. : -Fl/usr/local/pgsql/lib.
  • Il peut être nécessaire de créer un lien symbolique depuis une version spécifique de la bibliothèque vers un nom général de bibliothèque :
    ln -s /usr/lib/pqsql.so.5 /usr/lib/pqsql.so
    

De manière alternative, installez le paquet -dev du client postgresql en utilisant le gestionnaire de paquets de votre distribution.

Problèmes de nettoyage des paramètres

Light bulb  Remarque: Vérifiez ceci : est-ce que .paramtype est réellement nécessaire ?

Au moins dans FPC <= 2.6.2 : si vous effacez (.clear) un paramètre (i.e. le mettre à NULL), PostgreSQL pourrait avoir des difficultés à reconnaître le type du paramètre.

Dans ce cas, spécifiez explicitement le type, p.ex. :

FWriteQuery.Params.ParamByName('LONGITUDE').ParamType:=ptInput; //required for postgresql
FWriteQuery.Params.ParamByName('LONGITUDE').Clear

Comment faire

Utiliser INSERT RETURNING

Obtenir le dernier ID inséré

Avec PostGres, il n'est pas nécessaire d'exécuter une seconde requête pour obtenir le dernier ID inséré.

Utilisez INSERT RETURNING et lisez la valeur :

var 
  ID: Integer
..
Query.SQL.Text:= 'INSERT INTO myschema.films(film_name)' +
                 'VALUES(:film_name) RETURNING film_id;';
Query.Open;
ID:= Query.FieldByName('film_id').AsInteger;

Obtenir des champs multiples et des expressions

RETURNING dans PostgreSQL est plus flexible que dans la plupart des SGBDR. Il marche avec les ordres INSERT, UPDATE et DELETE et peut être n'importe quelle liste de champs, constantes ou expression qui pourrait être renvoyée par un SELECT.

INSERT INTO films (film_name) VALUES ('val') RETURNING film_id;  -- Returns id's for newly created rows.
INSERT INTO films (film_name) VALUES ('val') RETURNING film_id, kind;  -- Returns id and kind fields in newly created rows.
INSERT INTO films (film_name) VALUES ('val') RETURNING *; -- Returns all fields in newly created rows.
     
UPDATE films SET kind = 'Dramatic' WHERE kind = 'Drama' RETURNING film_id; -- Returns id's of updated rows.
UPDATE films SET kind = 'Dramatic' WHERE kind = 'Drama' RETURNING film_id, film_name; -- Returns id and film names of updated rows.
UPDATE films SET kind = 'Dramatic' WHERE kind = 'Drama' RETURNING *; -- Returns all fields of updated rows.
     
DELETE FROM films RETURNING film_id; --Returns id's of deleted rows.
DELETE FROM films RETURNING film_id, film_name; --Returns id's and film names of deleted rows.
DELETE FROM films RETURNING *;  -- Returns all fields of deleted rows.

RETURNING utilisant des champs, des constantes et des expressions :

INSERT INTO films (film_name) VALUES ('val') RETURNING id, 'a' AS a, id*2 AS doubled_id, CASE WHEN id > 100 THEN 'a' ELSE 'b' END AS foo;

Paquet PostgreSQL : les unités de bas-niveau

Comem dans toutes les bases de données, le code SQLdb dépend de l'unité PostgreSQL spécifique de bas niveau qui enveloppe la bibliothèque du pilote PostgreSQL (.so/.dll/.dylib). Normalement vous pourriez utiliser le code SQLdb de haut niveau car il vous permet de coder plus rapidement et de basculer facilement entre les bases de données, etc.

Utiliser ceci est très facile, tout ce dont vous avez besoin est de compiler certaines unités, et d'utiliser ces unités dans votre programme. Vous avez besoin de spécifier l'emplacement de la bibliothèque cliente de PostgreSQL (libpq) pour la compilation et c'est tout.

L'unité principale est appelée postgres, normalement c'est la seule unité que vous devez inclure dans votre clause uses.

Exigences

Vous avez besoin d'au moins la version 0.99.5 de Free Pascal (en pratique toute version de FPC wsauf les extrêmement plus anciennes). Les en-têtes sont traduits de PostgreSQL version 6.3.1.

Installation

L'unité postgres vient avec les paquets de Free Pascal et est distribuée avec le compilateur. Celui-ci contient un répertoire postgres avec les unités, un programme de test et un makefile. Accédez à ce répertoire et éditez le Makefile pour définir les variables pour votre système. Vous devez fournir seulement une chose :

  1. Le répertoire où la bibliothèque libpq réside, habituellement /usr/local/pgsql/lib.

En tapant :

make

Cela devrait compiler les unités et le programme. Si la compilation a été réussie, vous pouvez installer en tapant :

make install

(Rappelez-vous que le répertoire où les unités devraient être installées.)

Vous pouvez alors tester le programme en exécutant :

make test

Cela :

  • exécutera le programme de test testpg. Il s'agit d'une traduction directe d'un programme d'exemple du Guide du programmeur PostGreSQL.
  • exécutera un script pour créer une table dans la base de données et la remplir avec quelques données, pour cela, le chemin au programme psql doit être dans le PATH de votre système. Par défaut, le base de données utilisée est testdb.
  • exécutera le programme de test testemail
  • lancera un script shell à nouveau pour effacer la table créée.

Vous verrez beaucoup de messages sur votre écran, vous donnant des retours d'information et des résultats. Si quelque chose ne va pas, Make vous en informera.

Aller vers Packages List

Voir aussi

  • TPSQL - Un ensemble de composants dataset/database pour PostgreSQL alternatif.
  • Lazarus DB Faq - Plus d'info sur la programmation des SGBDR.
  • Lazarus Database Tutorial - Faire travailler Lazarus avec diverses bases de données.