Sign in Join
Wiki copytemporary

postgres/fr: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11## Vue d'ensemble
22
33Vous 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.
44
55Avantages de PostgreSQL:
66
77- Il est disponible et largement utilisé
88- Très stable et a un ensemble complet de fonctionnalités.
99- Licence libérale (sans frais) par rapport à MySQL.
1010
1111Inconvénient de PostgreSQL:
1212
1313- Certains hébergeurs peuvent ne pas offrir PostgreSQL
1414- Pas de version incorporée (i.e. sans serveur distant/installé, comme Firebird le propose)
1515
1616Win64: SVP, consulter l'avertissement [[Windows Programming Tips/fr|ici]] sur l'inutilisation de certaines versions de FPC/Lazarus Win64.
1717
1818## Accès direct à PostgreSQL
1919
2020Vous 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.
2121
2222Vous pouvez la télécharger librement depuis [Composants Lazarus](https://www.devart.com/pgdac/download.html).
2323
2424## Zeos
2525
2626Zeos prend en charge PostgreSQL ; veuillez lire [[ZeosDBO/fr|ZeosDBO]].
2727
2828## SQLDB
2929
3030FPC / 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 :
3131
3232![](/wiki-images/c/c5/Sqldbcomponents.png%E2%80%8E)
3333
3434**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.
3535
3636La propriété charset est utilisée pour l'encodage du client.
3737
3838Le 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 :
3939
4040``` pascal
4141PQConnection.Params.Add('port=' + VariableContainingPort);
4242```
4343
4444D'autres paramètres de connexion particuliers peuvent être spécifiés en utilisant la propriéét Params :
4545
4646``` pascal
4747PQConnection.Params.Add('application_name=''yourappname''')
4848```
4949
5050### Exemple
5151
5252Voir [[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.
5353
5454### Surveillance des événements
5555
5656Si 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.
5757
5858C'est une enveloppe mince autour de FPC **PQEventMonitor** ; veuillez consulter le programme exemple FPC pqeventstest.pp pour les détails.
5959
6060### Installation et erreurs
6161
6262Comme pour toutes les unités SQLdb, vous avez besoin de vos bibliothèque cliente (**tous** les fichiers PostgreSQL .dll/.manifest)
6363
6464- dans une dossier dans le chemin (de recherche des bibliothèques, tel que c:\windows\system32 pour Windows)
6565- ou (pour Windows) dans le dossier de votre programme (p.ex. lib\something\\ dans votre dossier de projet et le
6666
6767#### Pilote Windows 64 bit
6868
6969Pour développer une application 64 bit, vous devez utiliser une DLL 64 bit (remarque générale).
7070
7171> **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).
7272
7373Un pilote Windows 64 bit est franchement difficile à trouver mais peut être téléchargé ici : [1](http://www.enterprisedb.com/products-services-training/pgdownload#windows). 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.
7474
7575#### Erreur: "Can not load PostgreSQL client library "libpq.dll""
7676
7777Le programme ne peut pas trouver les fichiers du pilote PostgreSQL.
7878
7979Voir ci-dessus pour les instructions d'installation des bibliothèques.
8080
8181Un bon exemple qui démontre comment inclure les fichiers DLL du pilote en connectant Lazarus avec PostgreSQL sous Windows est [easyDB](http://paginas.fe.up.pt/~asousa/wiki/doku.php?id=proj:lazarus_projects#easy_db).
8282
8383Sur Linux/Unix/OSX, assurez-vous que les bibliothèques PostgreSQL sont dans le chemin de recherche des bibliothèques, i.e. :
8484
8585- 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.
8686- 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 :
8787 ``` bash
8888 ln -s /usr/lib/pqsql.so.5 /usr/lib/pqsql.so
8989 ```
9090
9191De manière alternative, installez le paquet -dev du client postgresql en utilisant le gestionnaire de paquets de votre distribution.
9292
9393#### Problèmes de nettoyage des paramètres
9494
9595> **Note:** Vérifiez ceci : est-ce que .paramtype est réellement nécessaire ?
9696
9797Au 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.
9898
9999Dans ce cas, spécifiez explicitement le type, p.ex. :
100100
101101``` pascal
102102FWriteQuery.Params.ParamByName('LONGITUDE').ParamType:=ptInput; //required for postgresql
103103FWriteQuery.Params.ParamByName('LONGITUDE').Clear
104104```
105105
106106## Comment faire
107107
108108### Utiliser INSERT RETURNING
109109
110110#### Obtenir le dernier ID inséré
111111
112112Avec PostGres, il n'est pas nécessaire d'exécuter une seconde requête pour obtenir le dernier ID inséré.
113113
114114Utilisez INSERT RETURNING et lisez la valeur :
115115
116116``` pascal
117117var
118118 ID: Integer
119119..
120120Query.SQL.Text:= 'INSERT INTO myschema.films(film_name)' +
121121 'VALUES(:film_name) RETURNING film_id;';
122122Query.Open;
123123ID:= Query.FieldByName('film_id').AsInteger;
124124```
125125
126126#### Obtenir des champs multiples et des expressions
127127
128128RETURNING 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.
129129
130130``` SQL
131131INSERT INTO films (film_name) VALUES ('val') RETURNING film_id; -- Returns id's for newly created rows.
132132INSERT INTO films (film_name) VALUES ('val') RETURNING film_id, kind; -- Returns id and kind fields in newly created rows.
133133INSERT INTO films (film_name) VALUES ('val') RETURNING *; -- Returns all fields in newly created rows.
134134
135135UPDATE films SET kind = 'Dramatic' WHERE kind = 'Drama' RETURNING film_id; -- Returns id's of updated rows.
136136UPDATE films SET kind = 'Dramatic' WHERE kind = 'Drama' RETURNING film_id, film_name; -- Returns id and film names of updated rows.
137137UPDATE films SET kind = 'Dramatic' WHERE kind = 'Drama' RETURNING *; -- Returns all fields of updated rows.
138138
139139DELETE FROM films RETURNING film_id; --Returns id's of deleted rows.
140140DELETE FROM films RETURNING film_id, film_name; --Returns id's and film names of deleted rows.
141141DELETE FROM films RETURNING *; -- Returns all fields of deleted rows.
142142```
143143
144144RETURNING utilisant des champs, des constantes et des expressions :
145145
146146``` SQL
147147INSERT 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;
148148```
149149
150150## Paquet PostgreSQL : les unités de bas-niveau
151151
152152Comem 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.
153153
154154Utiliser 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.
155155
156156L'unité principale est appelée **postgres**, normalement c'est la seule unité que vous devez inclure dans votre clause uses.
157157
158158### Exigences
159159
160160Vous 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.
161161
162162### Installation
163163
164164L'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 :
165165
1661661. Le répertoire où la bibliothèque libpq réside, habituellement /usr/local/pgsql/lib.
167167
168168En tapant :
169169
170-`make`
170+```text
171+make
172+```
171173
172174Cela devrait compiler les unités et le programme. Si la compilation a été réussie, vous pouvez installer en tapant :
173175
174-`make install`
176+```text
177+make install
178+```
175179
176180(Rappelez-vous que le répertoire où les unités devraient être installées.)
177181
178182Vous pouvez alors tester le programme en exécutant :
179183
180-`make test`
184+```text
185+make test
186+```
181187
182188Cela :
183189
184190- exécutera le programme de test testpg. Il s'agit d'une traduction directe d'un programme d'exemple du Guide du programmeur PostGreSQL.
185191- 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.
186192- exécutera le programme de test testemail
187193- lancera un script shell à nouveau pour effacer la table créée.
188194
189195Vous 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.
190196
191197Aller vers [[Package List/fr|Packages List]]
192198
193199## Voir aussi
194200
195201- [[TPSQL/fr|TPSQL]] - Un ensemble de composants dataset/database pour PostgreSQL alternatif.
196202- [[Lazarus DB Faq/fr|Lazarus DB Faq]] - Plus d'info sur la programmation des SGBDR.
197203- [[Lazarus Database Tutorial/fr|Lazarus Database Tutorial]] - Faire travailler Lazarus avec diverses bases de données.
198204
199205---
200206*From the Free Pascal wiki, page "postgres/fr", as it stood on 2020-02-23 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history