Mot-clé - pgadmin

Fil des billets - Fil des commentaires

vendredi, octobre 24 2008

pgAdmin : stats sur les index

Ça fait un petit moment que je n'avais pas ajouté une nouvelle fonctionnalité dans pgAdmin. Récemment, je me suis rendu compte chez un client que pgAdmin ne proposait pas de stats sur les index, en dehors des stats proposés par pgstatindex quand ce dernier est installé. Du coup, impossible de connaître le nombre de parcours d'index, de lecture, etc. Bref, hier, j'ai fait ce petit patch qui donne ce résultat :

statindex.png

lundi, septembre 15 2008

GSoC pgAdmin : pgScript

Deuxième GSoC de pgAdmin, l'intégration de pgScript. Ce dernier est un outil permettant de réaliser de petits scripts mêlés avec des requêtes SQL. En effet, les langages style PL/pgsql demandent forcément la création d'une fonction. Or il se trouve des cas où créer une fonction n'a pas réellement un grand intérêt. Prenons un exemple que je viens tout juste d'avoir sur le canal IRC #postgresqlfr. Une personne a demandé comment modifier automatiquement tous les propriétaires des tables d'un schéma. Il n'existe pas vraiment de solutions en dehors d'exécuter la commande ALTER TABLE sur chaque table. Le plus simple est de créer un petit script Bash ou Python pour cela. Maintenant, il sera aussi possible de créer un script pgscript.

Tout se passe encore une fois dans l'outil de requêtage :

gsoc_pgscript.png

Le script se rédige au même endroit que les requêtes SQL (bloc 1 dans la capture d'écran). Le code que j'ai placé se comprend assez facilement. Je lance la requête sur pg_tables, récupère toutes les lignes dans la variable tables, et parcours cette table dans une boucle while. Oui, je suis malheureusement obligé de faire aussi un count(*) pour récupérer le nombre de résultats, c'est très con et malheureusement c'est pas le seul truc très con dans cet outil. Ensuite je lance un ALTER TABLE pour chaque table récupérée.

Le bloc 2 indique la nouvelle icône qui permettra d'exécuter un pgScript. En cliquant dessus, le script est exécuté et le résultat s'affiche dans le bloc 3.

Voilà, c'est tout simple. Quel intérêt par rapport à Python ou Perl ou $SCRIPTLANGUAGE ? aucune idée. Peut-être plus simple pour l'installation (il suffit d'installer pgAdmin, pas le langage Python, le module pyscopg2? etc). Mais ça fait un langage de plus à apprendre... alors quel intérêt ? J'avoue que je ne comprends pas vraiment. Il me semble bien plus simple de lancer un petit script bash du style :

 psql -AtF ";" -c "select tablename from pg_tables where schemaname='public'" test | while read table
 do
   echo "alter table $table owner to postgres;"
 done | psql test

On pourrait aussi se dire que, après tout, c'est un langage de plus, donc du positif. Pas si sûr... parce que, maintenant, il va falloir le maintenir.

PS : Oui, je sais qu'une réponse plus intéressante pour cet utilisateur est d'utiliser REASSIGN OWNED. C'est d'ailleurs ce que j'ai fait.

mercredi, août 27 2008

pgAdmin : enfin des dialogues redimensionnables

Je travaille dessus depuis le 15 juin. Mon but était de faciliter la création de nouveaux dialogues (ne pas avoir à calculer l'emplacement d'un composant par exemple... je ne vous raconte pas le cauchemard qu'était le placement d'un élément en haut d'un dialogue car cela voulait dire recalculer la position de tous les éléments situés en dessous). C'était aussi de permettre aux utilisateurs de dimensionner les dialogues à la taille que leur permettait leur écran. Tout ceci est maintenant possible.

La réalisation de ce patch m'a demandé de comprendre l'écriture de fichiers XRC (des fichiers XML de définition des fenêtres/dialogues). Ce ne fut pas une partie de plaisir car le protocole est très peu décrit. J'ai quand même fini par trouver cette page de wiki mais la plupart du temps, ce fut surtout un processus du style modification/test/modification/test/etc pour comprendre le fonctionnement du schmilblick que je commence à bien maîtriser. Bien sûr, il existe des outils pour dessiner l'interface d'une fenêtre et générer automatiquement le fichier XRC mais je les trouve peu commode d'utilisation et la plupart sont très buggés. Donc, c'est du manuel. Vive gvim :)

Bref, après deux mois et demi de travail, j'arrive à un gros patch non complet car j'ai encore des soucis avec sept dialogues. J'ai donc commité tous les dialogues qui ne posaient pas de problème pour mieux travailler à la résolution des problèmes constatés. En effet, conserver un gros patch sur les trois architectures de pgAdmin n'est pas chose aisée.

J'ai commité ce patch cet après-midi. Tout a l'air d'aller bien.

J'ai relancé la discussion sur le patch qui a initié ce gros travail, à savoir le patch sur la possibilité de modifier le champ texte SQL du dialogue de propriétés des objets. Dave a déjà trouvé deux bugs sur Mac OS X. Je viens de corriger un bug, bien que non relatif à mon patch. Je n'arrive pas à reproduire le deuxième. Cette correction m'a permis de comprendre comment corriger un des dialogues non commités. Et après un peu de travail, je n'ai plus que quatre dialogues à revoir : fonction, rôle, type et schedule (planification des jobs de pgAgent). J'ai bon espoir que tout ceci soit fini rapidement.

mardi, août 19 2008

GSoC pgAdmin : Graphical Query Builder

GSoC, c'est le Google Summer of Code. Cette année, pgAdmin a deux projets sponsorisés dans ce cadre. Le premier a pour but d'intégrer pgScript dans pgAdmin. Mais je vais parler aujourd'hui du deuxième dont le but est d'ajouter un constructeur graphique de requête. En gros, le but est de faire ce que Microsoft Access et OpenOffice.org Base font : permettre d'écrire une requête sans taper une ligne de SQL. Le premier patch que j'ai pu testé n'avait pas permis de voir grand chose, à cause d'erreurs de compilation. Le dernier patch, envoyé hier soir, permet beaucoup plus de choses. En fait, il est même complet.

Pour accéder à cette fonctionnalité, il faut ouvrir l'outil de requêtage :

gqb1.png

Vous voyez la différence ? c'est pas simple. Il s'agit du nouvel onglet, nommé « Graphical Query Builder ». En cliquant sur cet onglet, on voit trois nouveaux panneaux. Le premier permet de sélectionner tables et vues. Pour cela, il suffit de cliquer sur la table souhaitée et la déplacer sur le second panneau. Ce dernier va accueillir tables et vues à requêter. Il va permettre de faire des liens entre elles et de sélectionner les colonnes à afficher. Le dernier panneau dispose de trois onglets:

  • le premier onglet permet de sélectionner les colonnes à afficher
  • le deuxième onglet permet de faire des filtres

gqb2.png

  • le troisième onglet permet de trier le résultat

gqb3.png

La requête est disponible après avoir cliqué sur le bouton d'exécution :

gqb4.png

Le tout est très simple à utiliser. Comme je l'ai dit dans mon mail de retour suite à mes tests, tout me paraît bon en dehors de la fenêtre de saisie des valeurs. Le commit réalisé par Dave Page ce soir montre que le dialogue corrige le seul vrai problème que j'avais trouvé (un problème de redimensionnement de la fenêtre de saisie).

Enfin un GSoC qui se termine avec succès pour pgAdmin. Et une évolution majeure de pgAdmin pour la prochaine version, la 1.10.

lundi, août 11 2008

Journée satisfaisante pour pgAdmin

En effet, j'ai commité deux patchs sur lesquels je travaillais depuis un moment.

Le premier concerne le support des objets FTS. J'ai déjà pas mal bloggué dessus, je n'y reviendrais donc pas. Seul point à savoir, j'ai eu quelques modifications à faire, mais cela n'a pas changé fondamentalement l'interface. Les copies d'écran déjà disponibles sont donc encore d'actualité (pour la plupart).

Le second concerne le support de la modification des tables héritées sur une table existante. Cette fonctionnalité n'est disponible que depuis la version 8.2 de PostgreSQL, mais pgAdmin ne permettait pas, avec son interface, de modifier les tables héritées une fois la table créée. J'ai ajouté cette possibilité, mais ça n'a pas été une partie de plaisir. Le fonctionnement est assez complexe à comprendre... alors à coder... Mais bon, c'est fait.

Bonne journée, non ? :)

mercredi, juillet 30 2008

Ajout de la recherche plein texte sur pgAdmin3 - 3ème jour

Clairement, j'ai attaqué le gros morceau. J'ai mis pas mal de temps à comprendre exactement le coup des configurations et des tokens associés. Et des dictionnaires associés aux tokens. Etc, etc.

Bref, le résultat de la journée, c'est ça :

Onglet Tokens des propriétés d'une configuration

Oui, ça a l'air très peu. Il a quand même fallu que je me creuse sérieusement les méninges pour comprendre comment fonctionnent ces foutues configurations. Mais ça ne suffit pas. Il faut pouvoir ensuite le coder et surtout trouver l'interface adéquate. Bref, ça n'a pas été simple.

Le gros intérêt, c'est que, maintenant, tout est codé. J'ai même réussi à réaliser l'exemple du chapitre 12 de la documentation. J'ai même essayé de faire un screencast avec krecordmydesktop, mais soit il est planté soit il est très lent. Impossible d'obtenir le fichier vidéo Ogg Vorbis.

Bref, il ne reste plus que du debug approfondi sur toutes les plateformes. La fin de ce projet est proche :)

mardi, juillet 29 2008

Ajout de la recherche plein texte sur pgAdmin3 - 2ème jour

Comme prévu, j'ai ajouté la gestion des deux derniers objets. Voici une copie du navigateur d'objets (en n'affichant que les objets concernant la recherche plein texte) :

fts5.png

La fenêtre sur les propriétés d'un analyseur :

fts6.png

Et celle sur les propriétés d'un dictionnaire :

fts7.png fts8.png

Le deuxième onglet d'un dictionnaire concerne les options à fournir au modèle associé.

Le développement a donc bien avancé. Dans le boulot qui reste, il faut que je revienne sur la fenêtre des propriétés des configurations. Je dois lui ajouter un deuxième onglet pour gérer la modification du contenu d'une configuration. Je dois aussi tester mon code sur Mac et Windows.

lundi, juillet 28 2008

Ajout de la recherche plein texte sur pgAdmin3

Cette semaine, je bosse à plein temps sur pgAdmin. Merci encore à Dalibo pour cette semaine :)

Le but principal de cette semaine de codage est d'ajouter le support des objets de la recherche plein texte dans pgAdmin. En effet, même la version 1.8, sortie pourtant en même temps que la version 8.3 de PostgreSQL, ne permet pas de gérer ces objets par l'interface graphique. Mon travail revient donc à ajouter les dialogues permettant de créer/modifier/supprimer une configuration, un dictionnaire, un analyseur et un modèle de recherche plein texte.

J'ai commencé avec la fenêtre de configuration. En voici une copie d'écran :

fts3.png

Le travail a été assez simple. J'ai bêtement copié le dialogue des propriétés des opérateurs, et modifié de façon approprié. Du coup, l'après-midi, j'ai pu continuer avec la fenêtre des modèles :

fts4.png

Concernant le navigateur de bases de données, j'avais pensé au départ placer un noeud "Recherche plein texte" au même niveau que celui des schémas, des langages, etc. Tout à fait comme le fait phpPgAdmin. Cependant, en implantant le premier dialogue, je me suis aperçu que les objets dépendaient aussi des schémas. Du coup, j'ai mis les objets de la recherche plein texte dans les schémas, ce qui nous donne ceci :

fts1.png

Dans la partie droite, nous avons les infos spécifiques à l'objet sélectionné, rien que du très habituel :

fts2.png

Bref, que du bon. Demain, je m'attaque tout d'abord à la fenêtre des analyseurs (qui sera une simple copie de celle des modèles), puis à celle dictionnaire, un peu plus complexe car il faut gérer un deuxième onglet).

PS : toutes les fenêtres ajoutées sont évidemment directement redimensionnables.

samedi, juillet 19 2008

Travaux en cours sur pgAdmin

Depuis ma "journée de codage sur pgAdmin", j'ai continuer à bosser intensément sur le code de pgAdmin.

Concernant le patch sur l'activation du champ texte de la requête SQL, il a été décidé avec Dave Page que j'allais l'intégrer dans une revue des dialogues. Mon idée est de revoir tous les dialogues de propriétés des objets pour ajouter des composants (wxFlexGridSizer et wxSizer pour les connaisseurs) permettant un dimensionnement automatique des dialogues. Cela permet notamment d'autoriser le changement de taille des dialogues par l'utilisateur comme le font actuellement les dialogues sur les fonctions et les triggers. Donc, plus simplement, ce travail va revoir l'intégralité des dialogues pour permettre leur redimensionnement par les utilisateurs. C'est un gros boulot. Dès le premier dialogue, je pense être tombé sur un bug de wxWidgets sur Mac. Pfff, il est pas prêt de se terminer, ce patch.

L'autre gros travail concerne la fenêtre d'état du serveur. Il se fera en plusieurs patchs suivant cette découpe :

  • Remplacer le composant wxNotebook par wxAuiNotebook pour que les utilisateurs puissent fermer certains onglets, arranger l'ordre des onglets restants via drag-and-drop, etc.
  • Permettre d'ouvrir plusieurs fenêtres d'état du serveur (ça permettra de voir plusieurs rapports d'un même serveur en même temps, ou de surveiller plusieurs serveurs).
  • Ajouter une barre d'outils pour modifier le serveur surveillé, le délai de rafraichissement et ajouter un filtre et/ou un tri.
  • Ajouter des rapports sous forme de graphes pour les vues statistiques (à la "Gnome System Monitor").
  • Améliorer l'affichage des journaux applicatifs (en affichant avec différentes colonnes, en permettant tri et filtre).
  • Ajouter une option en ligne de commande pour démarrer la fenêtre d'état du serveur.
  • Colorier les lignes des processus (par exemple vert pour les processus fonctionnels, orange pour ceux en cours d'exécution d'une requête mais dont l'exécution de la requête a dépassé une certain durée, bleu pour les processus ne faisant rien, rouge pour ceux en attente d'un verrou, etc.)
  • Ajouter la possibilité de sélectionner un processus et de copier la requête dans l'éditeur de requêtes.
  • Ajouter la possibilité de sélectionner un processus et de n'afficher que les verrous utilisés ou attendus par ce processus.
  • Afficher un arbre logique des verrous plutôt qu'une liste.

Bref, du boulot, mais bien découpé, donc plutôt simple à suivre.

Le troisième gros boulot concerne l'ajout des fonctionnalités de recherche plein texte. Il s'agit simplement d'ajouter la gestion des trois types de données. Cela devrait être assez simple, et je suis assez impatient de m'attaquer à cela.

En dehors de ces trois gros boulots, je me suis attaqué à un petit manque de pgAdmin. Il n'est pas possible actuellement d'ajouter des tables héritées à une table déjà existante alors que cette fonctionnalité est proposée par PostgreSQL depuis la version 8.2. J'ai donc commencé un patch sur cela. J'ai encore un petit bug à corriger et cela devrait être commitable.

Enfin, cette semaine, j'ai remarqué chez un client que pgAdmin ne propose aucune statistique sur les index quand on est sur le noeud principal Index. C'est assez simple à ajouter, je vais m'en occuper rapidement.

Tout ça pour dire que le boulot continue, que le boulot est plaisant. Tant mieux car l'investissement (en temps et en argent) est croissant.

pgAdmin : quelques nouvelles

Je m'implique de plus en plus dans le projet pgAdmin. Auparavant, je faisais de petits patchs ou de la traduction. Maintenant, et notamment avec mon envie de revoir l'intégralité des dialogues de propriétés, je dois aller un peu plus loin. En effet, lorsque je modifie le contenu d'un dialogue, je vérifie sur Linux ce que ça donne. Et j'envoie un patch quand le résultat me satisfait. Malheureusement, sur Windows, comme sur Mac, le résultat n'est pas forcément aussi bon. Il faut donc vérifier l'affichage sur toutes les plateformes. Je ne peux pas demander à Dave Page (le développeur principal, qui dispose de quoi vérifier sur toutes les plateformes officiellement supportées) de tester chacune de mes modifs. Surtout que, quand il trouve un problème spécifique à une plateforme que je n'ai pas, c'est galère à déboguer.

Donc, il me fallait avoir la possibilité de tester sur les trois plateformes : Linux, Windows et Mac.

Pour Windows, c'est simple : une machine virtuelle et hop, c'est parti. Bon, dans les faits, c'est pas si simple. Il faut installer Visual Studio Express, compiler wxWidgets, compiler pgAdmin... que des emmerdes représentant plusieurs heures de boulot (dans le sens plusieurs jours d'affilée). Mais bon, ça se fait. Difficilement, mais on y arrive.

Pour Mac, c'est autre chose. Il faut déjà acheter une machine Apple. J'ai opté sur les conseils de Dave pour un Mac Mini de base. Bref, acheté jeudi, installé vendredi, compilation de pgAdmin le samedi matin. Beaucoup plus cher (à cause de l'achat de la machine) mais beaucoup plus facile à compiler/installer/tester. En deux/trois heures, c'était prêt.

Bref, voilà. Je peux générer une version Linux, Mac et Windows de pgAdmin, ce qui devrait améliorer mon travail et aussi l'accélérer.

mardi, juin 17 2008

Une journée de codage sur pgAdmin

Ça faisait un petit moment que je n'avais pas bossé sur pgAdmin. J'ai profité de l'après-midi et la soirée du samedi pour bosser sur plusieurs patchs :

  • raccourcis des menus contextuels mal affichés ;
  • activation du champ SQL dans les fenêtres de propriétés ;
  • utilisation du dialogue de couleurs pour la fenêtre de propriété du serveur ;
  • séparation du champ commentaire dans son propre onglet.

Raccourcis

Depuis un petit moment, les menus contextuels de pgAdmin s'affichaient mal. Au lieu d'avoir la lettre du raccourci soulignée, j'avais un tiret bas devant la lettre :

patch1.png

Je pensais que c'était de ma faute (mauvaise compilation, mauvaise configuration, etc). Un mail sur pgadmin-support m'a indiqué que je n'étais pas le seul. Après une discussion avec Dave et quelques tests, je me suis aperçu que la version 2.8.5 de wxWidgets semblait être la coupable. À force de recherche, j'ai fini par retrouver le commit responsable du problème sur le SVN de wxWidgets. Au prix d'une longue conversation, j'ai même réussi à convaincre les développeurs de wxWidgets de la présence de ce bug. La correction est apparue hier soir sur leur dépôt (branche WX_2_8_BRANCH). La version 2.8.8, contenant ce correctif, devrait bientôt sortir.

Ajout du dialogue de couleur

Lors de pgcon2008, Dave a intégré un patch qui permet d'ajouter une couleur de fond pour chaque serveur sur le navigateur d'objets :

patch2.png

Bon, je ne trouve pas que ce soit super beau, mais ce qui m'a surtout gêné, c'est l'interface utilisateur pour saisir la couleur. Un utilisateur doit saisir le code couleur sous la forme d'une couleur HTML. C'est juste un bête champ texte. J'en ai donc profité pour ajouter un bouton :

patch3.png

et j'ai fait en sorte que le clic sur ce bouton affiche la fenêtre standard de saisie d'une couleur :

patch4.png

Ce patch a été accepté, il est enregistré dans le SVN depuis hier soir.

Activation du champ SQL

Jusqu'à la version 1.8, l'onglet SQL ne permet pas de modifier le champ contenant la requête SQL. En cas d'erreur de pgAdmin pour la génération du SQL permettant d'appliquer les modifications de l'utilisateur sur l'interface, je pense qu'il faut avoir un moyen pour que l'utilisateur modifie le SQL généré par pgAdmin. Le meilleur exemple est lorsqu'on ajoute une colonne avec une contrainte NOT NULL. Sans plus d'informations, la requête échouera car la nouvelle colonne n'aura aucune valeur et ne pourra pas se voir ajouter la contrainte NOT NULL. IL faut donc que l'utilisateur puisse ajouter le code SQL permettant l'ajout d'une valeur par défaut aux lignes déjà présentes.

Mon patch ajoute une case à cocher permettant d'autoriser la modification du champ SQL. Comme Dave et moi ne voulons pas gérer le reverse engineering des modifications apportées dans le champ SQL, tous les objets des autres onglets sont désactivés. On peut voir le contenu des onglets, mais pas le modifier.

J'ai parlé d'un champ texte pour la requête SQL. J'aurais plutôt dû parler de deux champs car il y a deux groupes de requêtes. En effet, deux objets peuvent avoir besoin de deux transactions de modification : les bases de données et les tablespaces. Ceci est dû à une correction sur la version 8.3 de PostgreSQL.

Voici donc le résultat :

patch5.png

Dernier problème à régler : si un utilisateur modifie le nom de l'objet créé dans la requête, le navigateur d'objet affiche toujours le nom indiqué dans le champ texte Nom, et pas celui modifié. Après un rafraichissement, tout va bien... mais en attendant, l'affichage est faux. Donc, il me reste du boulot sur celui-ci.

Séparation du champ commentaire

L'idée de ce patch était de déplacer le champ Commentaire dans un autre onglet car certains dialogues deviennent vraiment trop longs. Sur mon portable, je n'ai plus accès au tiers du dialogue de création/modification d'une table (ce qui est gênant pour cliquer sur le bouton OK). Aucune technicité requise pour ce patch, juste cinq heures à passer à créer le nouvel onglet, à déplacer le texte statique et le champ texte dans ce nouvel onglet, et à revoir les placements de contrôles, pour chaque dialogue sur les propriétés des objets. Je ne sais pas comment, j'ai perdu la moitié de mon patch. Cependant, Dave est plutôt contre pour au moins deux bonnes raisons :

  • deux dialogues ont un grand nombre d'onglets, ce qui rend leur gestion plus douloureuse qu'autre chose ;
  • il existait une règle sur la création de dialogues, règle que je ne connaissais (car planqué dans une ancienne branche, et oublié depuis là-bas)... Dave l'a d'ailleurs ajouté à la page Wiki sur le développement de pgAdmin.

Bref, patch abandonné.

Conclusion

/me content

La plupart de mes travaux de samedi dernier ont donné un résultat direct, soit sur wxWidgets soit sur pgAdmin. J'ai encore plein d'idées à mettre en place. J'ai d'ailleurs envoyé deux mails pour parler de deux gros projets :

Du boulot en prévision :)

samedi, mai 31 2008

Atelier PostgreSQL

Après la présentation sur PostgreSQL, voici arrivé le moment de l'atelier. Il y a eu moins de personnes que prévus (entre 10 et 12 prévues, un peu moins de 10 présents). J'ai commencé en indiquant ce qu'il me semblait important de voir, à savoir :

  • Installation de PostgreSQL
    • récupérer la liste des paquets concernant PostgreSQL ;
    • installer le serveur ;
    • installer les outils (psql, createdb, etc.) ;
    • installer les modules contrib ;
    • installer un langage de procédures.
  • Configuration minimum
    • connexion (max_connections, listen_addresses et pg_hba.conf) ;
    • mémoire (shared_buffers, effective_cache_size... et SHMALL/SHMMAX une fois tombé dans le piège habilement posé :) ).
  • Utilisation de base
    • outils PostgreSQL (createdb, createuser, createlang) ;
    • psql (exécution d'une requête, méta-commandes) ;
    • pgAdmin (navigateur d'objets, outils de requêtages, fenêtre d'état du serveur, fenêtre de configuration du serveur) ;
    • outils PostgreSQL de sauvegarde (pg_dump) et de restauration (psql, pg_restore).

Tout s'est bien déroulé, en alternant explications puis manipulations. Pour la partie pgAdmin et la sauvegarde, il y a eu très peu de tests à cause d'un manque de temps (on a fini à 17h au lieu de 18h, principalement suite à un questions/réponses assez important) et parce qu'on n'avait pas de bases contenant des objets utilisateur. Donc, j'ai fait un mini-cours là-dessus. Pour pgAdmin, on avait en plus le problème que la version installable était une 1.4.3... autant dire que ça ne ressemble en rien à la version actuellement disponible.

Mais bon, l'un dans l'autre, je crois que le message est passé : PostgreSQL n'est pas si compliqué à installer, à configurer et à utiliser. Évidemment, on n'est pas entré dans le détail, c'était pas une formation avancée sur PostgreSQL, mais les points importants étaient là. La fin a même permis de parler identifiant de transaction, ligne vivante/morte et VACUUM. Donc déjà plus haut niveau.

Le contact avec les personnes présentes a été très bon. Beaucoup de questions et d'intérêt pour ce SGBD, et ça fait plaisir. Apparemment, l'atelier a été très apprécié. Donc je suis ravi. Ça augure du bon pour les RMLL.

mardi, mai 6 2008

Ajout des nouvelles colonnes statistiques sur les tables

pgAdmin affichait quelques informations sur les statistiques. J'ai ajouté les nouvelles colonnes de la 8.3 (« live tuples », « dead tuples », « HOT updated tuples »), ainsi que les horodatages sur le VACUUM et l'ANALYZE dans les statistiques disponibles à partir de la liste des tables. Cela donne ces deux jolis screenshots :

Table Stats (list of table)

et

Table Stats (details on one table)

Deux patchs appliqués coup sur coup, je suis plutôt content de moi :) maintenant, il faudrait voir à faire en sorte que les colonnes se dimensionnent automatiquement suivant le texte placé dans la colonne.

Ajout d'une colonne Owner sur les listes d'objets dans PostgreSQL

Mon dernier patch date de... pfiou... fin d'année 2007. C'est pas tout à fait vrai, j'ai fait une modif la semaine dernière qui permet d'éviter un bon nombre de messages d'avertissements de g++, version 4.2 (la version de la 8.04 d'Ubuntu). Mais point de nouvelles fonctionnalités.

Je voulais ajouter quelques informations sur les listes d'objets lorsqu'on clique sur un noeud, notamment taille (pour les objets physiques comme les tables et les index) et propriétaire. Comme je me suis aperçu que la taille est déjà disponible sur l'onglet Statistiques, je me suis concentré sur l'ajout du propriétaire des objets. Patch écrit hier, validé par Dave ce matin, commité par moi-même ce midi.

Le screenshot obligatoire : Owner column for objects list

Et voilà, rien de plus. Seulement maintenant (ie à partir de la prochaine version majeure), vous disposez du nom des propriétaires des objets listés.

PS : un autre patch est en attente, il ajoute bon nombre de nouvelles statistiques provenant des versions 8.2 et 8.3 de PostgreSQL.

samedi, décembre 22 2007

Support de « Drop/Reassign Owned » dans pgAdmin

Allez hop, un nouveau patch pour pgAdmin. Depuis la version 8.2 de PostgreSQL, il existe une instruction SQL permettant de réaffecter tous les objets du rôle à un autre. Il s'agit de REASSIGN OWNED. Une autre instruction du même acabit a été ajoutée : DROP OWNED, qui permet de supprimer les objets appartenant à un utilisateur. Pour l'instant, pgAdmin ne proposait pas d'interface pour ces deux types d'action. Ça faisait partie de mes vieux TODO et j'ai profité de cette semaine pour m'y mettre.

Après un clic droit sur un rôle, le menu contextuel propose un nouvel élément : « Reassign/Drop Owned... ».

reassign1.png

Une nouvelle fenêtre s'affiche permettant de choisir entre une réaffectation et une suppression des objets du rôle sélectionné.

reassign2.png

Après sélection de l'action, du nouveau rôle si besoin est et de la base où exécuter la commande, la fenêtre se ferme et l'action est exécutée.

Simple et rapide. Il m'aura quand même fallu pratiquement trois jours, principalement pour comprendre comment ajouter la nouvelle fenêtre :) Prochain patch, la gestion du changement de schéma dans les objets.

jeudi, novembre 8 2007

« Cross-Platform GUI Programming with wxWidgets »

Je viens juste de le terminer. J'avoue que j'ai survolé certaines parties qui m'intéressaient moins. En fait, j'ai lu ce livre pour mieux participer au développement de pgAdmin. De ce côté là, il a parfaitement rempli son œuvre en me donnant une meilleure idée des capacités de wxWidgets. J'ai certainement encore des manques en C++, mais en ce qui concerne wxWidgets, je suis mieux armé.

Quant au bouquin en lui-même, je l'ai trouvé intéressant et bien écrit : beaucoup d'exemples de code, beaucoup d'explications et, autant que je puisse en juger, un tour exhaustif des composants proposés par défaut. Bruce Perens a fait un excellent choix pour sa série OpenSource chez Prentice Hall.

vendredi, octobre 5 2007

IDE pour pgAdmin

J'ai réalisé dernièrement quelques patchs pour pgAdmin. Auparavant, j'utilisais Kate pour accéder aux codes source, faire mes modifs, etc. J'ai ré-installé KDevelop, histoire de voir si cet outil me permettrait de coder plus rapidement. J'avoue que pour l'instant ça marche plutôt bien, j'en suis assez content. Cependant, je suis loin d'utiliser beaucoup de fonctionnalités spécifiques de KDevelop. En fait, je m'en sers surtout comme d'un Kate évolué, spécialisé dans l'édition de code source. Enfin bon, tout ça pour dire que KDevelop me plaît bien et que c'est mon principal outil pour lire le code source de pgAdmin et de PostgreSQL.

vendredi, septembre 28 2007

Activités libresques

Ça fait un bon moment que je n'ai pas parlé de mes activités dans le libre. Même si je reste silencieux, je continue à participer. C'est de la traduction et du développement.

Au niveau de la traduction, en dehors de la mise à jour des manuels pour les nouvelles versions mineures de PostgreSQL, j'ai beaucoup travaillé sur les fichiers .po des différentes versions. Nous sommes à 100% pour toutes les versions stables (à partir de la 7.4) mais surtout, la qualité est bien meilleure.

Au niveau développement, cela ne concerne que pgAdmin. Je viens de proposer plusieurs patchs pour améliorer la compatibilité du futur PostgreSQL 8.3 (Patch to change owner of language, Patch to add parameters' value to a function, Patch to add typmod's functions to a type's creation statement, Patch to enable/disable rule on a table). Malheureusement, la plupart de ces patchs ne feront pas partie de pgAdmin 1.8 (pour laquelle nous sommes presque en RC).

Bref, ça avance. Je pense que le mois d'octobre sera dédié à deux projets libres : la mise à jour du manuel de PostgreSQL pour la 8.3 (dont la beta 1 devrait très rapidement sortir), et de nouveaux patchs pour pgAdmin (en espérant que la branche 1.8 soit créée, ce qui me permettra de vraiment avancer sur des grosses nouveautés).

samedi, juillet 7 2007

Prato 2 : pgdays.it, confs techniques (enfin :) )

Beaucoup de bonnes conférences aujourd'hui, principalement celles des hackers PostgreSQL.

Josh a ouvert le bal avec une conférence sur les nouveautés de PostgreSQL 8.3. Il a d'abord confirmé qu'il fallait de plus en plus de temps pour valider les patchs que pour les écrire... du coup, il y a quelques bouchons sur la voie de la 8.3 mais cela devrait quand même déboucher sur une version vraiment majeure (en tout cas plus que la 8.2). Sortie maintenant prévue en septembre/octobre (de cette année :) ). D'après lui, les performances de la 8.2 se situent entre MySQL5 et Oracle. En dehors de ce commentaire subjectif (à mon avis), il a entamé la liste des améliorations de la 8.3 : Hot updates (j'ai pas bien pigé le fonctionnement, mais il semble que ça ne fera gagner énormément en perfs que pour peu d'applications), amélioration du cache des requêtes, des ORDER BY...LIMIT, des checkpoints, de l'autovacuum. La réduction du volume des WAL pour les opérations COPY et CLUSTER devrait être un des points majeurs de cette version. Il y aurait aussi une grosse amélioration des parcours séquentiels dans le cas où plusieurs backends font le même seqscan en même temps mais j'avoue que là non plus je n'ai pas pigé comme cela devait fonctionner. Dans les améliorations sympas, le XML dans core, la gestion des ENUM, les curseurs qu'on peut mettre à jour, l'index advisor (que Josh lui-même n'a pas voulu expliquer :) ), le OLAP window (ça, ce fut une découverte pour moi, je croyais que Gavin n'avait pas eu le temps de terminer ce patch et qu'il avait donc été repoussé pour la 8.4).

Il a poursuivi sur une deuxième conf : cinq ensembles de conseils pour améliorer les performances. Absolument génial. Le contenu est déjà bien connu, certains points méritent d'être testés, mais dans l'ensemble c'est du très bon.

Hans-Jurgen Schonig a fait une prestation très remarqué. Il était marrant, simple, et compréhensible sur un sujet plutôt complexe : la réplication, et notamment la réplication multi-maître. On a eu droit à un vrai show, c'était excellent :)

continuent est venu faire sa pub, donc je n'en parlerais pas plus. Je me suis juste bien emmerdé pendant cette conf.

Mitani a présenté PGCluster et PGCluster2. En bref, utiliser le premier si 90% de vis requêtes sont des requêtes de lecture. Sinon utiliser le deuxième. Sachez tout de même que les performances sont assez décevantes.

La conférence d'Oleg Bartunov sur TSearch2 était géniale. Seul bémol, sa façon à passer très rapidement de slide en slide, parfois même en marche arrière... difficile de suivre dans ces conditions. Néanmoins, il a abordé beaucoup de points sur les différentes possibilités de TSearch2 et ajouté quelques infos sur la version qui sera incluse dans la 8.3. Il faut absolument que je récupère les slides d'Oleg (il me semble qu'il a utilisé celles de sa présentation lors de PGCon2007).

La pause déjeuner m'a permis de discuter beaucoup avec Dave Page pendant que Jean-Paul se faisait interviewer avec de nombreux hackers. Nous avons échangé quelques idées sur ce qu'il fallait faire pour la prochaine version de pgAdmin. J'ai du boulot en vue... Attendez-vous aussi à la première beta vendredi de cette semaine ou peu après.

L'après-midi a été moins intéressante, peut-être aussi est-ce dû à la fatigue. David Fetter a fait deux conférences très intéressantes sur DBILink et PL/Perl. Je ne suis pas un adorateur de Perl mais j'ai quand même été séduit par les deux confs de David. Beaucoup d'humour, beaucoup d'infos, une envie de faire participer le public (ce qui est bien, ça a un peu réveillé tout le monde... entre le repas et la chaleur, tout le monde peinait).

Andreas a fait une conf intéressante sur son module tablelog. Je vois bien son intérêt mais aussi son gros inconvénient. Un INSERT sur une table tracée revient à deux opérations d'écriture (une pour la table tracée, une autre pour la table de log).

Il y a eu ensuite une conférence sur PostgreSQL versus MySQL. Je ne vois pas l'intérêt de ce genre de conférences, donc j'ai zappé.

La dernière conférence était vraiment excellente. Simon Riggs a tenté d'expliquer un maximum de choses sur PITR en une demi-heure. Mission impossible, mais en fait il s'est quand même bien débrouillé. J'en ai un peu discuté avec lui après. Pour moi, sa conf aurait dû durer deux heures. Enfin, l'important, c'est qu'il a réussi à démontrer la robustesse de PITR et c'est à mon avis le plus important pour les nouvelles fonctionnalités.

Après les confs, il y a eu une réunion sur la constitution d'un groupe européen. Peu de choses en sont sorties. Le plus important a été, à mon avis, qu'on se rencontre tous (enfin presque tous), qu'on ait un visage sur chaque nom, sur chaque pseudo. Ça aide à s'unir, à s'entraider. Le reste va pouvoir débuter sur la liste de discussions.

La galerie du jour...

samedi, mai 12 2007

Pas très bavard ces temps-ci

Je sais, je cause peu sur mon blog ces temps-ci. Pas grand chose à raconter. J'attends que Magnus trouve un peu de temps pour prendre en compte mes patchs pour le site officiel de PostgreSQL, j'ai codé un patch pour ajouter le support de l'option FILLFACTOR dans pgAdmin, je relis deux/trois trucs pour EMS, j'ai beaucoup joué avec le « Log Shipping » de PostgreSQL (superbe fonctionnalité d'ailleurs). Voilà. Sans compter évidemment tout le temps que j'ai passé dans mes toilettes (enlevé le papier peint, mettre de l'enduit, passer une couche d'imprime, peindre, accrocher des étagères) et celui que je passe maintenant dans l'entrée...

Ma TODO list est assez simple actuellement : traduction de PGday.it, ajouter le support de DROP/REASSIGN OWNER à pgAdmin, traduire les .po de la 8.3, commencer à jeter un oeil sur cette version... ce ne sont pas les idées qui manquent :)

- page 1 de 2