mardi 28 septembre 2010

Connecter openoffice à PostgreSQL

Connexion utilisant le pilote SDBC
Démarrant openoffice base, nous tombons sur cet écran:


Après avoir choisi 'Se connecter à une base de données existante', nous examinons les différentes possibilités:


postgresql est-il dans la liste?
Parfait ce sera notre premier choix, celui qui fait appel au pilote SDBC
Pas de postgresql?
Et bien , on ferme openoffice base!
Mais pas de soucis: il suffit d'ajouter une extension à openoffice.
Vérifions si un paquet fournissant l'extension existe pour la distribution utilisée.
Chez Ubuntu, c'est le paquet openoffice.org-sdbc-postgresql. 
A défaut, Il faut télécharger ici le pilote qui convient.
Attention, avec Ubuntu, ce pilote téléchargé ne fonctionnera pas
Il existe deux façons de l'installer:
Méthode 1:
Démarrer openoffice writer
Choisir Outils/Gestionnaire d'extension
Cliquer sur le bouton Ajouter et sélectionner le fichier téléchargé (qui ne doit pas avoir été décompressé!).
Fermer writer et relancer openoffice base: postgresql devrait maintenant figurer dans la liste.
Méthode 2:
Dans un terminal (openoffice doit être fermé)

[toto@rigel ~]$ cd $(dirname $(which soffice));cd $(ls -l soffice | sed -r 's/^.*>.(.*)soffice$/\1/')
[toto@rigel program]$ unopkg add /home/toto/downloads/postgresql-sdbc-0.7.6a.zip
(/home/toto/downloads/ est un exemple d'endroit où le fichier téléchargé pourrait se trouver)

La première des deux commandes semble assez effrayante, mais il s'agit simplement de trouver où est installé openoffice et de s'y rendre. Son emploi est facultatif.

Une installation pour tous les utilisateurs nécessite que l'on agisse en tant que root:
[root@rigel ~]# cd $(dirname $(which soffice));cd $(ls -l soffice | sed -r 's/^.*>.(.*)soffice$/\1/')
[root@rigel program]# unopkg add --shared /home/toto/downloads/postgresql-sdbc-0.7.6a.zip 

Bon, nous pouvons maintenant sélectionner postgresql dans la liste déroulante et puis cliquer sur 'Suivant'. Dans la fenêtre qui surgit, il reste à indiquer le nom de la base de données:


Et puis C'EST TOUT. On peut déjà cliquer sur Terminer sauf si on désire se connecter sous un autre nom que celui de l'utilisateur qui à lancé openoffice, ou tester la connexion, auquel cas on cliquera une nouvelle fois sur Suivant avant de cliquer sur Terminer:


Connexion avec JDBC
L'utilisation de ce type de connexion requiert l'installation du paquet postgresql-jdbc (libpg-java chez Ubuntu).
Openoffice doit tourner en utilisant un environnement d'exécution java (voir Outils/Options):

Cliquant sur 'Chemin de classe' puis 'Ajouter une archive', on a la possibilité d'ajouter un jar. Comment le choisir? Il semblerait que postgresql-jdbc (ou libpg-java) ait installé plusieurs jar.
Mais la commande suivante:
[toto@rigel ~]$ rpm -qlv postgresql-jdbc | sed -rn 's/^.* (\/.*jar)$/\1/p'
/usr/share/java/postgresql-jdbc-8.4.701.jar
/usr/share/java/postgresql-jdbc.jar -> postgresql-jdbc-8.4.701.jar
/usr/share/java/postgresql-jdbc2.jar -> postgresql-jdbc.jar
/usr/share/java/postgresql-jdbc2ee.jar -> postgresql-jdbc.jar
/usr/share/java/postgresql-jdbc3.jar -> postgresql-jdbc.jar
ou celle-ci (suivante qu'on utilise une distribution rpm ou deb):
toto@rigel:~$ dpkg -L libpg-java | xargs ls -ld | sed -rn 's/^.* (\/.*jar)$/\1/p'
/usr/share/java/postgresql.jar -> postgresql-jdbc3-8.4.jar
/usr/share/java/postgresql-jdbc3-8.4.jar
/usr/share/java/postgresql-jdbc3.jar -> postgresql-jdbc3-8.4.jar
montre qu'en fait il n'y a qu'un seul jar (les autres sont des pointeurs).
On va ajouter  /usr/share/java/postgresql-jdbc.jar:




Après avoir redémarré openoffice, nous sommes maintenant prêt à nous connecter via JDBC.
Paramétrer la connexion est quand même moins simple que dans le cas précédent. Après avoir saisi ce qui convient, nous testons tout de suite la classe: en cas d'échec inutile de poursuivre.


Poursuivons par le test de la connexion, comme précédemment:
Aie:
En fait, on passe maintenant par la boucle locale. Et dans ce cas, ce qui es prévu dans pg_hba.conf est une authentification par mot de passe. 
Mais attention: il s'agit d'un mot de passe PostgreSQL et non pas d'un mot de passe système d'exploitation. Donc en l'absence d'un tel mot de passe, il faut l'initialiser:

Ensuite, on coche 'Mot de passe requis' et on re-teste après avoir saisi un nom d'utilisateur:


Connexion depuis un client installé ailleurs que sur le serveur
Tout d'abord il faut configurer le serveur pour qu'il accepte des connexions qui viennent d'autres machines: le fichier pg_hba.conf par défaut ne permet pas de telles connexions. Voici le fichier tel que modifié en conséquence (en rouge):
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         @group01                          ident map=map01
#
local   all         all                               ident
# IPv4 local connections:
host    all         all         127.0.0.1/32          md5
# IPv6 local connections:
host    all         all         ::1/128               md5
# IPv4
host    all         all         192.168.1.0/24        md5
( L'adresse indiquée dépend évidemment du réseau).


De plus, il faut agir au niveau du fichier postgresql.conf:

# - Connection Settings -
listen_addresses = '*'                  # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost', '*' = all
                                        # (change requires restart)
port = 5432                             # (change requires restart)


Reste quelques petits aménagements  au niveau du pare-feu.
Sur la machine client, il suffit d'installer le paquet client postgresql.
Pour ce connecter depuis ce client, il faut indiquer le nom de la machine serveur:
Pilote SDBC:

Pilote JDBC


Et pour se connecter dans un simple terminal (c'est hors-sujet, mais bon...):