Développement - Edouard Guérin : Dév, Web & Musique
Accueil

Installer PL/pgSQL à la main

Lorsque vous avez installé PostgreSQL et que vous avez oublié d'ajouter PL/pgSQL comme langage de procédures stockées, rien n'est perdu, il n'est pas trop tard pour l'ajouter. Pour cela il faut exécuter quelques commandes ; elles sont dans la documentation officielle mais je l'ajoute ici en guise de mémoire.

On dit ici à PostgreSQL où aller chercher les objets partagés pour l'exécution de PL/pgSQL

CREATE FUNCTION plpgsql_call_handler() RETURNS language_handler AS
    '$libdir/plpgsql' LANGUAGE C;

Ensuite on déclare une fonction de validation

CREATE FUNCTION plpgsql_validator(oid) RETURNS void AS
    '$libdir/plpgsql' LANGUAGE C;

Enfin on dit que les deux précédentes fonctions seront utilisables dans les fonctions et triggers via le langage "plpgsql"

CREATE TRUSTED PROCEDURAL LANGUAGE plpgsql
    HANDLER plpgsql_call_handler
    VALIDATOR plpgsql_validator;

Voilà, c'est prêt, vous pouvez maintenant utiliser le PL/pgSQL dans vos procédures stockées.

PHP en Mode CGI sur MyServer Project

Si votre serveur HTTP Apache ne fonctionne pas sur Windows à cause de ce bug,

Log Apache :

[notice] Parent: child process exited with status 3221225477 -- Restarting.

peut-être que MyServer Project pourra vous servir de roue de secours. Ce serveur HTTP est très simple à installer (encore faut-il passer un peu de temps la première fois...) et sa configuration est efficace.

Pour exécuter des scripts PHP sur MyServer en mode CGI :

  1. télécharger MyServer
  2. l'installer
  3. télécharger la dernière archive stable de PHP
  4. décompresser
  5. éditer php.ini, décommenter la ligne cgi.force_redirect et mettre la valeur à 0
  6. copier le php.ini dans C:\Windows (pour se faire plaisir...)
  7. modifier la variable d'environnement PATH et y ajouter le chemin d'accès à PHP
  8. éditer le fichier MIMEtypes.xml de MyServer et ajouter
<MIMETYPE>
    <EXT>php</EXT>
    <MIME>NONE</MIME>
    <CMD>RUNCGI</CMD>
    <MANAGER>C:/PHP-5.2.0/php-cgi.exe</MANAGER>
</MIMETYPE>

Reste plus qu'à démarrer MyServer ! Pour plus de confort, il est évidemment possible de modifier le port d'écoute du serveur... 8080 est un bon compromis, il suffit de modifier la ligne appropriée dans le fichier virtualhosts.xml

Actualités des outils de développement

Grandes nouvelles :

Le développement de logiciels avec NetBeans est vraiment simplifié, notamment avec l'excellent GUI Builder "Matisse". Couplé avec DB4O, il y a vraiment moyen de faire de petites applications splendides... A tester rapidement.

A tester également. Pourquoi les classes d'accès aux services Web Yahoo, Amazon et Flickr sont dans ce framework... il y a tellement de choses plus importantes à développer, non ?

db4o : le SGBDOO efficace

Les logiciels de gestion utilisent en grande majorité les SGBDR. Parallèlement, l'adoption des langages orientés objet dans le développement d'applications est courante voire nécéssaire. Il suffit de regarder le nombre d'offres d'emploi concernant les langages OO pour s'en convaincre :

www.lesjeudis.com (18/04/2006)

  • Java = 491
  • .NET = 211
  • VB = 75 (tiens donc...)

Actuellement en plein projet Java dans le cadre de mes études, nous avons retenu db4o (groupe de 3 personnes) comme système de gestion de base de données.

Pour information, db4o est un SGBDOO Open Source fonctionnant avec les langages Java et .NET

Pourquoi avoir choisi un SGBDOO plutôt qu'un traditionnel SGBDR ?

  • pas besoin de mapping objet / relationnel
  • stockage naturel de l'information
  • souplesse : adéquation avec un langage OO (en l'occurence Java)
  • rapidité de développement

Pourquoi avoir choisi db4o ?

  • Open Source (GNU/GPL)
  • SGBDOO (raisons évoquées ci-dessus)
  • base emabarquée
  • simplicité

Voici maintenant un exemple de requête db4o écrite en S.O.D.A (Simple Object Database Access) :

   public static ObjectSet getAdherent(String login) {
       Query query = db.query();
       query.constrain(Adherent.class);
       query.descend("login").constrain(login);
       return query.execute();
   }

Quoi de plus simple ? Imaginons une classe "Adherent" (gestion d'une association). Pour retrouver un adhérent via son login la méthode consiste à déclarer une requête : db.query. Ensuite il faut ajouter une contrainte précisant sur quel type d'objet l'interrogation aura lieue (équivalent d'un FROM en SQL). Enfin la méthode descend indique au moteur qu'il va y avoir une contrainte sur l'attribut "login" de notre classe "Adherent". L'enregistrement (ajout & modification) d'un objet est quant à lui plus simple, il suffit d'invoquer la méthode set. Exemple : db.set(monObjet);

En bref, db4o apporte la simplicité, évite l'installation d'un serveur (système embarqué) et permet de se concentrer sur le code métier plutôt que de s'attarder à la gestion des données. Cette dernière est extrèmement simplifiée, c'est un gain de temps énorme dans le développement.

Si c'était à refaire, nous reprendrions db4o ; foi de développeur !

PS : réouverture des commentaires & trackabacks

Comment tester PHP6 ?

Non, PHP6 n'est pas sorti ! Ca n'est pas prévu avant fin 2006 (il me semble). Cependant, pour tester les versions en développement il suffit de se rendre sur le site des PHP Snapshots et d'y télécharger la dernière version compilée. A l'heure ou sont écrites ces quelques lignes, pour éxecuter PHP6 avec Apache, il suffit de modifier le fichier httpd.conf pour y insérer :

LoadModule php5_module "C:\php6.0-win32-latest\php6apache2.dll"

Ne vous y trompez pas, c'est bien php5_module qu'il faut renseigner (pour la version actuelle), en effet, il s'avère que php6_module fasse "bugguer" Apache, cela doit être temporaire... Ce n'est pas une version de dev pour rien !

Le phpinfo() nous affiche quelques nouvelles variables dans le php.ini

unicode.from_error_mode
unicode.from_error_subst_char
unicode.http_input_encoding
unicode.output_encoding
unicode.runtime_encoding
unicode.script_encoding
unicode_semantics

C'est bien le support de l'unicode ! A tester... (avec prudence)

Pour avoir plus d'informations sur le sujet :
http://www.zend.com/zend/week/php-unicode-design.txt