jeudi, mai 17 2012

Appel à conférenciers pour 2012 2012 aura lieu à Prague, en octobre 2012. L'appel à conférenciers vient d'être lancé par Magnus Hagander. N'hésitez pas à envoyer vos propositions sur tout sujet qui vous semble intéressant (évidemment en relation avec PostgreSQL). Les propositions sont acceptées jusqu'au 1er août. Un comité se réunira après pour faire le tri dans les propositions et sélectionner les plus intéressantes.

Si vous n'êtes pas intéressé par donner vous-même une conférence, faites passer néanmoins le message à vos collègues qui pourraient l'être :)

Et notez bien que l'événement aura lieu du 23 au 26 octobre. Nous vous attendons tous à l'hôtel Corynthia pour participer à ce nouvel événement majeur pour les contributeurs et utilisateurs de PostgreSQL.

samedi, mars 31 2012

Profiling PL/pgsql functions

I spent my whole week trying to fix PL/pgsql functions. More to the point, I tried to make them perform better. My customer complains that they aren't fast enough, and I agree with him: some of his PL/pgsql functions are really slow. Unfortunately, he uses a lot of PL/pgsql functions. One function may call many other functions, and it's hard to tell which one is the culprit (if there is only one).

My first step was to use pgFouine on a three-days log to know which queries are really slow on his system. Three queries stood out as being the real offenders. I tried to EXPLAIN ANALYZE them, but found that these queries involved lots of views and functions. Not really easy queries to fix. So I set track_functions to pl, so that I can see which functions were called by one query, and which functions are the really offending ones. Here is the result I got:

b1=# SELECT funcname, calls, total_time, self_time
b1-# FROM pg_stat_user_functions;
 funcname  | calls  | total_time | self_time 
 f0        |      1 |     328486 |      1375
 f1        |      1 |        210 |       210
 f2        |      1 |        123 |       123
 f3        |      1 |      20310 |     20310
 f4        |      1 |        763 |       763
 f51       |      1 |      33486 |     33486
 f52       |      1 |     250363 |    239703
 f53       |      1 |      19139 |     19139
 f6        |      1 |        399 |       399
 f7        |      1 |       1770 |      1770
 f8        |      1 |        543 |       543
 f_compute | 110588 |      10660 |     10660
(12 rows)

Some context first, I only executed f0(), which itself called all the other functions. So what do I get from this? f_compute() is executed 110588 times. That's a lot, but it doesn't consume much of f0() execution time (3%). f52() is only executed once, but took 76% of the total execution time of f0(). If I can make it run faster, I would probably gain a lot.

But there's more. f52() executes other functions, but its own execution took most of the time (95%). So what I really need to know is how long each of its statements last. There's not many way to know that actually. You can modify the function source code to add RAISE LOG statements in this function (you can find many examples on this depesz's post). It takes a lot of time to do that, you may do it wrong, you cannot always do it. You can also use the plprofiler from EnterpriseDB. That's the first thing I did. Due to the number of statements in each of the functions the query called, my query went from 5.4 minutes to more than two hours of execution time. I canceled it because I couldn't wait any longer. The only thing left was to modify the function source code, but I really hate this idea.

So I read the plprofiler code, and found a better way to do it. The plprofiler is a shared library that uses hooks inside the PL/pgsql interpreter to grab lots of information for each statement of each executed function. I only had to change the code to make it less a burden on my system. All I wanted was to get a line in the PostgreSQL log files when a function starts, when it ends, and when a function's statement is executed. It turns out that it's actually quite easy to do. You can find the code on the log_functions github page. After compilation, installation, and configuration of this tool, and then the execution of the query, I got this log (somewhat edited to make it fit better on this blog post):

10:56:24 LOG:  log_functions, DECLARE, f52
10:56:24 LOG:  log_functions, BEGIN, f52
10:56:24 LOG:  log_functions, STMT, line 7, type 14
10:56:24 LOG:  log_functions, STMT, line 14, type 14
10:56:24 LOG:  log_functions, STMT, line 23, type 14
10:56:24 LOG:  log_functions, STMT, line 32, type 14
10:56:24 LOG:  log_functions, STMT, line 41, type 14
10:56:24 LOG:  log_functions, STMT, line 52, type 14
10:56:24 LOG:  log_functions, STMT, line 75, type 14
11:00:14 LOG:  log_functions, STMT, line 99, type 14
11:00:14 LOG:  log_functions, STMT, line 110, type 14
11:00:14 LOG:  log_functions, STMT, line 122, type 14
11:00:14 LOG:  log_functions, STMT, line 133, type 14
11:00:14 LOG:  log_functions, STMT, line 145, type 14
11:00:14 LOG:  log_functions, STMT, line 156, type 14
11:00:14 LOG:  log_functions, STMT, line 168, type 14
11:00:14 LOG:  log_functions, STMT, line 179, type 14
11:00:14 LOG:  log_functions, STMT, line 191, type 14
11:00:14 LOG:  log_functions, STMT, line 202, type 14
11:00:14 LOG:  log_functions, STMT, line 214, type 14
11:00:14 LOG:  log_functions, STMT, line 225, type 14
11:00:14 LOG:  log_functions, STMT, line 237, type 14
11:00:14 LOG:  log_functions, STMT, line 248, type 14
11:00:14 LOG:  log_functions, STMT, line 260, type 14
11:00:14 LOG:  log_functions, STMT, line 271, type 14
11:00:14 LOG:  log_functions, STMT, line 283, type 14
11:00:14 LOG:  log_functions, STMT, line 294, type 14
11:00:14 LOG:  log_functions, STMT, line 304, type 14
11:00:14 LOG:  log_functions, STMT, line 306, type 13
11:00:14 LOG:  log_functions, STMT, line 308, type 10
11:00:14 LOG:  log_functions, END, f52

I also got lucky here. All the time spent on this function is spent on the statement in line 75. So what I really need to know is why it takes so long to do this query. The search of performance for this query is not really relevant for this blog post. I only wanted to show how you can profile a PL/pgsql function easily without changing its source code.

As I think it may be a useful tool for many people, it's available on my github page, and on pgxn. Hope it can help people profiling their PL/pgsql functions.

To end this blog post, know that there are many things one can do with hooks in PostgreSQL. This is just one of them. I already explained how you can use another one to log only superuser queries. This new one will totally fit in with my talk on hooks at PGCon 2012 :)

samedi, mars 10 2012

pgAdmin and wxWidgets 2.9

pgAdmin is a multiplatform tool. This means that you can use it on various operating systems, such as Windows, Mac OS X, Linux, and even Solaris. Not sure if that last one is still supported. To be honest, I write bugfixes and new features on my Linux laptop (Fedora 16), and checks them, whenever I can, on Mac OS X (Snow Leopard, on my old Mac Mini) and Windows (XP, still on the old Mac Mini). We use wxWidgets to make it easier to code user interfaces for all platforms. pgAdmin supports wxWidgets 2.8. The developers of wxWidgets are working hard on the next big release, 3.0. To ease the jump, they have a 2.9 release since quite some time. This 2.9 version will become 3.0 "when it's ready".

I'm really happy to see that we are now compatible with 2.9. There are probably still some itches to fix, but it's already quite usable.

Peter Geoghegan was the first one to work on this, and wrote a big patch, that Dave Page applied on 2011-02-01. There were a few fixes here, and there. The second phase, done by Peter, was the merge of the wxOGL contrib into our source tree (we had the author's permission for that). And then another bunch of fixes, mostly from reports sent by Colin Beckingham, and fixed by me.

Right now, I have something that works great on Linux.

Why is it important? because it offers a better support of new features of the operating systems, and it fixes a lot of issues we had previously with wxWidgets 2.8 that the developers of wxWidgets couldn't fix (either because it would require too much changes, or because they don't have the manpower to do it). 2.9 also adds some widgets that we would definitely love to use :

  • a property grid ;
  • a list control with a tree in the first column (to display tree where each item has informations to display in columns) ;
  • a native calendar control for Linux (the previous one is a wxWidgets custom control, and is not really usable) ;
  • a tree control with checkbox (we have that via a custom widget, one that we could get rid of... remember, less code is good) ;
  • and probably many other interesting enhancements (for example, support for GTK3 would make my day).

If you can test pgAdmin 1.15 with wxWidgets 2.9, please send any issues to pgadmin-hackers.

samedi, février 25 2012

An import tool for pgAdmin

With pgAdmin 1.14 and prior releases, there were only two ways to insert data in a table:

  • use the restore tool (which uses pg_restore) ;
  • use the query tool to execute INSERT queries (COPY queries are allowed if they use a file, but not stdin/stdout).

There was no way to ask it to import a CSV file for example. And a thread began on this matter a week ago. As working on the COPY API of libpq was quite motivating, I worked on this a few hours, and finished yesterday with this patch.

This patch adds a new window that allows a user to choose a file, and to select all options available in the COPY command (but only options available for import, not export).

This window is displayed when someone selects the "Import" item in the table's contextual menu, as shown in the following screenshot:


The import window has 5 tabs:

  • "File options" tab makes possible to choose a file, sets its format (text, CSV, or binary), and optionaly its encoding.


  • "Columns" tab allows the user to specify which columns are contained in the file. Right now, they must be in the same order than the table (because of the UI), but they don't have to be all present in the file.


  • "Misc Options", "Quote Options", and "NULL options" tabs are not used usually, but it could be handy to set another delimiter than the usual comma, amongs other possibilities.

import_win_3.png import_win_4.png import_win_5.png

When the user clicks the "Import" button, pgAdmin launches a COPY query that matches the selected options, and sends the file by chunks of 8KB. The scrollbar shows the progress of the import. If the import ends with success, the "Import" button is renamed "Done", and a click on it closes the dialog.

That was a really interesting patch to write, for the UI, and the COPY API. And it is a quite nice feature for pgAdmin.

samedi, décembre 10 2011

Nouvelles versions mineures, mise à jour de la traduction française

Contrairement à mon habitude, les manuels français de PostgreSQL n'ont été mis à jour que maintenant, soit cinq jours après la sortie des versions. Pour me faire pardonner, j'ai enfin corrigé le problème de la recherche dans la documentation de la version 9.1 (merci à Thomas pour l'info).

J'allais oublier... la documentation de la 8.2 n'a pas disparu. Elle est juste partie rejoindre les documentations des versions obsolètes.

samedi, octobre 29 2011

Sortie de pgsnap 0.7.0

Comme promis, voici la nouvelle version de pgsnap. Dans les nouveautés, la compatibilité avec PostgreSQL 9.1, un rapport sur les journaux de transactions et un autre sur les tailles d'index, la possibilité de trier tous les tableaux (merci jquery), sans parler de la possibilité d'ajouter automatiquement un répertoire contenant le rapport de toutes les bases de données.

Bref, du bon, mais rien de majeur non plus. La 0.8 devrait proposer plus de nouveaux rapports, et il est tout à fait possible qu'elle arrive rapidement (ie, avant la fin de l'année).

J'en ai profité pour faire une page wiki sur github qui récapitule quelques informations sur cet outil.

How to log superuser queries

A few weeks ago, one of my customers asked me if they could log all queries coming from superuser users. They have to make sure that none of their DBA could fire a query without that query being logged.

You can already log queries with the log_statement, or log_min_duration_statement GUCs. You can set these GUCs cluster-wide or for specific users. But there's a big issue here: the user can change the value of these GUCs, making it impossible to be sure everything they do is logged.

I first thought of writing a patch to handle this in PostgreSQL, but it also has a major issue: it won't be available for 9.0, the release they use. All new features are added to the development release, and I don't want to maintain a custom PostgreSQL release for anyone (that's too much burden). So, I came up with a nicer way of doing it.

PostgreSQL allows you to add hooks to the executor since 8.4. And you can use these hooks to know which queries are executed and by who. Actually, that's how pg_stat_statements works. So, all I needed to do was to create a small shared library that will add hooks to the executor. The hooks will check that the user executing a query is a superuser, and if that's true, log the query. Quite simple, here is the code of the hook:

static void
pgluq_log(const char *query)
    Assert(query != NULL);

    if (superuser())
        elog(log_level, "%s %s: %s", log_label, GetUserNameFromId(GetUserId()), query);

Of course, the library has more code than just that: to add/remove the hooks, to take care of two module GUCs (log level, and log prefix), but the most important stuff is on the pglug_log() function.

The module is available right now on github, and I intend to publish it via the website once my account will be approved. Docs are available here. It's compatible with PostgreSQL 8.4, 9.0, and 9.1.

Next thing I will do for this module is to add support for syslog. Right now, it only logs to the same location than PostgreSQL.

lundi, octobre 24 2011

Follow-up on 2011

Just got an email asking me where we did put the slides of the talks. As they are a bit difficult to find, here is the URL: Unfortunately, you won't find every speaker's slides yet. And for the record, I fixed my slides (two SQL statements were wrong... kinda lame of me).

I guess we should have the room host collects them at the end of each talk. That's something I expect us to do next year.

BTW, attendees, I don't know if you've all already done that, but remember that you can add feedbacks for the event itself and for each of the talks you've attended. Here is the webpage to do that:

vendredi, octobre 21 2011 2011, Amsterdam, jour 4

Vendredi a commencé assez difficilement : Gilles Darold à qui j'ai dû expliqué très rapidement et très mal l'enregistrement des personnes à l'accueil, pas de portable pour la conférence de Jean-Paul Argudo, et le portable de Luis Ochoa qui ne voulait pas fonctionner avec le rétro-projecteur... bref, la conférence donnée par Luis et moi-même a commencé un brin en retard et un peu sur les chapeaux de roue. Elle s'est néanmoins très bien passée. Bruce Momjian faisait partie de l'audience et a été impressionné par ce que Luis a été capable de faire en trois à quatre mois. Une personne lui avait posé une question mardi dernier, à savoir avait-on un outil libre capable de faire de la conception graphique de bases de données. Et il avait répondu non. Mais maintenant, il pourra répondre oui :) Bref. Le public était plutôt restreint pour nous (environ 10 personnes) ainsi que pour Jean-Paul, mais les retours ont été très bons. Le reste du public était dans la salle principale où Simon Riggs parlait du futur de PostgreSQL. Et, à ma grande surprise, il a parlé de réplication bi-directionnelle (autrement dit du maître/maître). Oui. Miam :-D

Gevik devait être le responsable des conférences de la deuxième salle mais il tenait beaucoup à assister à la conférence de Greg Smith sur les benchmarks. J'ai donc pris son poste pour qu'il puisse aller écouter Greg. De mon côté, ça m'a permis d'assister à la conférence de Jehan-Guillaume de Rorthais et de Leonardo Augusto Sapiras. Ils ont parlé de l'ajout d'un système de plugins dans phpPgAdmin, travail effectué pendant le GSoC 2011 par Leonardo. Très sympa, et certainement des plugins très intéressants vont arriver rapidement (allez, rapidement, de tête, un database designer bien plus joli que celui de pgAdmin (oui, je suis jaloux) et pgpooladmin).


Ensuite, Michael Meskes a parlé de la possibilité de remplacer une base de données propriétaire par PostgreSQL. Vu son expérience avec Informix, Oracle et SQL Server, il a donné quelques informations très utiles et quelques arguments qui jouent clairement en la faveur de PostgreSQL. Personnellement, j'ai aussi été très content de rencontrer ce monsieur dont j'entends parler depuis... facilement dix ans, et que je n'avais encore jamais rencontré.

Concernant les autres conférences de ce matin, j'avais déjà vu celle de Magnus Hagander lors de char(11). Une excellente conférence qui ouvre les yeux sur les possibilités offertes par le protocole de réplication.

L'après-midi a été beaucoup plus calme. Elle a commencé avec trois conférences. Vu le manque d'audience, la conférence de Jean-Paul a été annulée. Il semble que les conférences en français n'ont pas marché du tout et il faudra éviter cette erreur l'année prochaine.

J'étais moi-même à la conférence de Stephen Frost. Très intéressante, elle passait sur tous les points qui concernent la recherche des requêtes lentes ainsi que leur correction. Simple et bien vu. Par un conférencier très à l'aise, et très rapide. La dernière conférence était donnée par Selena Deckelmann (« Managing terabytes »), que j'avais déjà vu grâce à une vidéo sur internet (les slides sont sur et la vidéo sur ... désolé la vidéo que j'avais était meilleure mais je n'arrive pas à retrouver le lien). Une conférence plutôt intéressante.

Pour la fin, Ed Boyajian, CEO d'EDB, devait intervenir mais dû à un problème avec les douanes américaines, il n'a pas pu venir. Du coup, il a fait un petit discours via Skype pendant 10/15 minutes. Puis, Bruce Momjian a donné la conférence finale. Il a expliqué ce qu'il avait vu, entendu pendant ces quelques jours. Ce n'est rien de dire qu'il m'a de nouveau motivé à m'impliquer encore davantage dans cette communauté et je pense ne pas avoir été le seul :)


La journée s'est terminée avec les remerciements du staff aux conférenciers et aux participants.

Que dire de plus. C'était une extraordinaire expérience, des journées formidables et j'espère que je serais là l'année prochaine pour en profiter de nouveau.

jeudi, octobre 20 2011 2011, Amsterdam, jour 3

Je devais rester à l'accueil le matin mais Dave étant bizarrement aussi à l'accueil, j'en ai profité pour prendre des photos des conférenciers, ainsi que d'écouter un peu chaque conférence.

Cédric Villemain a fait une conférence en français sur Slony et Londiste. Il a pu ainsi annoncer la sortie de la dernière version de Slony, la 2.1, sortie survenue vers 2h du matin (heure locale) ce même jour. C'est de l'instantané :) Étant une conférence en français à Amsterdam, il y a eu peu de participants malheureusement.

Pendant ce temps-là, Greg Smith donnait sa conférence sur le VACUUM. Grosse audience et encore un gros succès pour Greg.


Mais j'ai préféré aller voir la conférence de Poojan Kumar, de la société vmware pour en savoir plus sur leur offre dans le "cloud". J'avoue avoir été assez impressionné par leur système de clonage et de sauvegarde.


Les trois conférences suivantes étaient encore une fois très intéressantes :

  • Heikki Linnakangas sur SSI



  • Jon Erdman sur la création de sauvegarde fichiers pour des tests ou de la pré-production


Personnellement, je serais plutôt allé à la conférence de Heikki. Je n'ai pas non plus eu l'occasion de voir les autres conférences de cette matinée. J'ai entendu des commentaires très positifs sur la conférence d'Alexander Korotkov, un étudiant GSoC qui présentait le résultat de son travail sur la création rapide d'index GiST. Travail qui devrait d'ailleurs être incorporé à la version 9.2. Cette dernière semble de plus en plus fortement orienté performances.

L'après-midi a commencé avec une conférence de Selena. Gros succès, impossible de fermer la porte de sa salle, les gens préféraient rester assis par terre, y compris à la porte pour l'écouter. Impressionnant :)


Gianni Ciolli a eu aussi beaucoup de monde pour sa conférence sur les requêtes CTE en écriture.


Jonathan Katz a présenté l'écriture d'extensions Django pour PostgreSQL, qui a eu malheureusement moins de succès, alors que le contenu est vraiment intéressant.



Ensuite a eu lieu ma propre conférence. 50 minutes sur les vues statistiques et sur ce qu'on peut en faire. J'ai eu entre 20 et 30 personnes, peut-être un peu plus. Les gens avaient l'air intéressé, notamment par les graphiques et le moyen d'y arriver. J'ai fini bien en avance, ce qui a permis quelques questions/réponses suivies d'une démo sur l'utilisation de la vue pg_locks (un peu hors sujet mais intéressant malgré tout).

Après ma conférence, j'ai eu l'occasion de discuter longuement avec Pavel Gollub, développeur principal des outils PostgreSQL proposés par microolap. Notamment, il a fait une démo très impressionnante de Database Designer. C'est vraiment le grand avantage de ce genre d'événements : rencontrer les gens qui créent et qui utilisent PostgreSQL. C'est très informatif, pratiquement plus que les conférences elles-mêmes.

La dernière conférence était les « Lightning talks ». C'est un ensemble de petites conférences. Chaque personne intéressé a cinq minutes maximum pour présenter une idée, un concept, un projet.


Cela peut ne pas être sérieux du tout, comme celle réalisée par Selena, ou au contraire très technique, ce qu'a fait Hans-Juergen.

Après cela, il a fallu attendre 19h pour aller à la soirée sponsorisée par Heroku : beaucoup de boissons, beaucoup de snacks et encore plus de discussions. Merci Heroku :)

mercredi, octobre 19 2011 2011, Amsterdam, jour 2

Première journée des conférences standards, donc gros rush à l'enregistrement. Néanmoins, cela se passe bien. Le fait d'avoir déjà enregistré les personnes venu hier a certainement bien aidé.


Magnus Hagander a fait son discours de bienvenue, puis a introduit Ram Mohan de la société Affilias. Ram venait faire la conférence d'ouverture de 2011. C'est un exercice difficile qui demande beaucoup de travail et je dois dire que Ram s'en est très bien sorti. C'est intéressant, factuel et en même temps motivant. Motivant pour utiliser PostgreSQL mais aussi pour participer à la communauté.


Après cette conférence et la pause-café, les conférences ont commencé. Difficile de ne pas trouver une conférence intéressante quand trois salles proposent une conférence chacune pratiquement toutes les heures. En fait, il a surtout été reproché que le choix était difficile à cause de la qualité des conférences et du fait que beaucoup se déroulaient en parallèle. C'est un problème bon à avoir car cela indique que nous ne nous sommes pas trompés dans le choix des conférences.

Malheureusement, faisant parti des organisateurs, je n'ai pas pu voir beaucoup de conférences entières. Je me suis baladé le matin entre les différentes salles de conférences pour prendre des photos. Magnus a eu beaucoup de succès avec sa conférence sur les nouveautés de la version 9.1 : beaucoup d'informations car beaucoup de nouvelles fonctionnalités, avec le point de vue d'un des développeurs majeurs de PostgreSQL.


Dave Page a d'ailleurs été dans le détail d'une de ses nouvelles fonctionnalités : SQL/MED.


J'avais déjà vu cette conférence, elle est vraiment bien pour comprendre comment implémenter un Foreign Data Wrapper. La conférence de Vincent Picavet sur PostGIS a aussi été bien suivie : PostGIS est vraiment une extension importante dans le monde de PostgreSQL.


Quant à Gianni Ciolli, il a osé aborder les fonctions de fenêtrage avec sa bonne humeur habituelle. Difficile quand il s'agit d'un sujet aussi complexe que celui-là.


L'après-midi, étant responsable d'une salle de conférences, j'ai pu voir les conférences qui s'y déroulaient entièrement. Gilles Darold a ouvert le bal avec une conférence sur ora2pg, malheureusement en français, ce qui a fait que peu de personnes y ont assisté. Pourtant, beaucoup voulaient venir mais une fois qu'ils ont compris que c'était en français seulement, ça a réduit nettement l'audience.


Gilles a expliqué l'historique du projet, les dernières fonctionnalités, les problèmes qu'il a pu rencontré, et plein d'autres choses encore. Ensuite, nous avons eu Marc Balmer.


Il a montré un exemple d'utilisation du mécanisme LISTEN/NOTIFY de PostgreSQL. Se faisant, il a démontré l'intérêt de ce mécanisme très particulier. C'était très convaincant. Enfin, Stephen Frost est venu parler de l'organisation de la revue de patchs. Stephen participe beaucoup au développement de PostgreSQL, il a notamment beaucoup contribué à l'intégration de la gestion des rôles. Du coup, sa vision du développement aidait bien à appréhender le besoin de revue de patchs, y compris par des personnes ayant une connaissance faible du langage C. Comme il le disait, mieux vaut que plusieurs personnes relisent les patchs, ça permet de détecter plus rapidement les éventuels bugs qui s'y trouvent.


Du coup, je n'ai pas vu du tout les autres conférences. Bruce Momjian a expliqué l'optimiseur de requêtes. J'avais déjà vu cette conférence lors d'un autre événement et le succès qu'il a eu cette fois-ci ne m'étonne pas du tout. Greg Smith et Simon Riggs ont parlé de réplication. Là-aussi, grosse audience, gros succès. Je serais bien allé à la conférence de Steve Singer (« Troubleshooting Slony »), ainsi qu'à celle de Stefan Kaltenbrunner (« Metering the smart way, a smart grid for the datacenter »). Je n'ai jamais eu l'occasion de les voir et j'en ai entendu beaucoup de bien.

La soirée a commencé à l'hôtel. Dalibo a sponsorisé une première heure de boissons et snacks gratuits, et OpenSCG a sponsorisé une deuxième heure. Après ça, nous sommes partis avec les personnes de Skype à la recherche d'un restaurant.

mardi, octobre 18 2011 2011, Amsterdam, jour 1

Cette journée est une journée consacrée aux mini-formations. Bruce Momjian a fait une journée sur l'administration de PostgreSQL. Greg Smith a fait lui-aussi une journée entière sur les performances. Enfin, Magnus Hagander et moi-même avons fait une demi-journée chacun sur la réplication. Magnus a présenté la réplication interne de PostgreSQL et je me suis occupé de la réplication proposée par Slony. Les formations les plus populaires étaient évidemment celles de Bruce et de Greg mais je suis assez content de voir que quelques personnes étaient intéressées par Slony.

Ma formation s'est bien passée. C'était la première fois que j'en faisais une en anglais mais après un petit stress inévitable, ça s'est bien mieux passé que ce que je craignais.

lundi, octobre 17 2011 2011, Amsterdam, jour 0

Après 3h30 de voyage en train, nous sommes enfin arrivés à Amsterdam pour les quatre jours de conférences sur PostgreSQL organisés par PostgreSQL Europe.

Ça fait maintenant un an qu'une dizaine de personnes travaillent, semaine après semaine, sur cet événement. Faisant parti de ces dix personnes, il est très plaisant d'en voir maintenant le résultat.

Dave Page et Magnus Hagander sont déjà à l'hôtel quand nous y arrivons. Nous les rejoignons rapidement pour leur dire bonjour, puis partons visiter la ville de notre côté pendant deux petites heures.

Au retour, il a fallu préparer les sacs que nous donnerons le lendemain aux participants, ainsi que les badges. Le travail s'est terminé à 20h. Nous sommes tous partis manger dans le centre-ville d'Amsterdam, et nous avons terminé la soirée au bar de l'hôtel.

lundi, septembre 26 2011

pgsnap compatible avec PostgreSQL 9.1

Cela fait un moment que je n'avais pas travaillé sur pgsnap. J'ai pris le temps d'ajouter le support complet de la 9.1 ce soir. Je n'ai pas encore préparé une nouvelle version car j'aimerais y ajouter quelques fonctionnalités. En espérant que je me laisse le temps de le faire réellement...

Bref, en attendant, les sources sont disponibles sur le compte github de Dalibo.

Je me demande aussi si je ne devrais pas le recoder en C. Ce sera certainement plus amusant à faire que du PHP. Peut-être que la version 1.0 sera en C du coup :)

Manuels mis à jour

Les manuels français ont été mis à jour suite à la mise à disposition des nouvelles versions mineures. Par contre, les versions CHM et PDF ne sont pas encore actualisées. J'espère pouvoir le faire cette semaine.

mardi, septembre 20 2011

Le planning des conférences pour est enfin disponible !, c'est l'ancien Autrement dit, plusieurs jours de conférences autour de PostgreSQL, organisés par la communauté, pour la communauté (contributeurs comme utilisateurs). C'est donc un excellent moyen que ces deux groupes se retrouvent et puissent discuter ensemble.

Cette année, l'événement a lieu à Amsterdam, du 18 au 21 octobre. Le premier jour est consacré à des formations/ateliers, et les trois autres à des conférences. Le planning est disponible ici.

Dalibo sera évidemment présent et donnera même quelques conférences :

  • New plugin architecture in phpPgAdmin and what to expect from it (Guillaume (ioguix) de Rorthais, Leonardo Augusto Sapiras)
  • Relational Database Designer for pgAdmin (Guillaume Lelarge, Luis Ochoa)
  • What's new in pgpool-II 3.1 (Jean-Paul Argudo)
  • What use are the statistics views? (Guillaume Lelarge)
  • Best practices with Ora2Pg (Gilles Darold)
  • Migrer à PostgreSQL: comment s'y prendre? (Jean-Paul Argudo)

N'hésitez pas à venir nombreux.

dimanche, septembre 11 2011

End of pgAdmin's GSoC 2011

Luis Ochoa sent me his latest patch some time ago. It took me a while to find some time to review his patch, to fix a few bugs, but I finally did it. And I applied the resulting patch this afternoon.

What we now have is really awesome: reverse engineering of an existing schema. Even more, we can build an SQL script to create the reversed model or only apply the changes between the model and a selected database. It could be another database than the one used for the reverse engineering. One simple example to show its power. You can reverse engineer your schema on your development database, connect to your production database and ask the database designer to build the script that will contain only the SQL to push the definition changes.

Of course, right now, the code is probably quite buggy. And it lacks a lot of features. First one would be a better datatype support. Only a few types are accepted right now. User defined types aren't obviously but also some uncommon types (like tsvector), and common ones (timestamp with timezone for example). Also lacking is a support of all the table properties (fillfactor, autovacuum settings are part of the missing ones).

If you want to take a look, you should probably see the video attached to this blogpost. You'll see how the database designer works with the pagila database (I fixed a few types in the schema to show a better demo but that's the only changes I made).

If you want to see it live, maybe you should come to in Amsterdam. Luis Ochoa and I will be presenting this tool, do some demos, and wait for suggestions, and feature requests.

samedi, septembre 3 2011

Wanna help us adding new features to pgAdmin?

And you don't know how to start? I've been there when I first worked on pgAdmin's source code. You need to understand pgAdmin's code, and you need to know wxWidgets. And PostgreSQL of course. Trust me, it takes quite some time to feel confident.

But there are a few things you can do to help us in our coding department. There are some little features, eagerly waited by some of our users, that are quite easy to code and that could help you start coding on pgAdmin. We have a list of feature requests on and I spent some time this evening to add a juniorjob tag to each easy-to-code feature. If you're interested, you should get a look at this junior job list. It would really help us to have some people working on these tickets.

And if you don't want to work on C++ code, you can still help us with the documentation. We'll try to have a complete new manual for 1.16, but we need help to write it. We also badly need translators.

vendredi, août 19 2011

Last month work on pgAdmin

Yeah, my last blog post on pgAdmin is a month old. Time to give you some news.

Let's begin with PostgreSQL compatibility. 1.14 won't handle security labels. We haven't find time to add support for that. Good news is that 1.16 will. We already have that in git. Here is how it looks on a table:


See the new "Security labels" tab? that's it. A better news is that we already support security labels on shared objects (I mean databases, tablespaces, and roles). And that's a 9.2 new feature.


Speaking of 9.2, we also added support for invalid domains and invalid check constraints.


The user can create these objects without the validate step; They can validate them later.

I think that's about it on PostgreSQL compatibility.

I know pgAdmin for quite a long time, and I've often been bitten by this old bug: open a property dialog, refresh the object on the browser, change the object in the property dialog... and crash. This shouldn't happen again. Once a property dialog is open for an object, the user can't refresh the object or any of its parents. He cannot either drop the object or any of its parents. And he cannot close the connection. Till he closes the property dialog. I'm really glad we finally put an end to this bug. Unfortunately, it's rather a big change in behaviour, so it won't be backpatched.

Luis Ochoa continued his work on his 2011 GSoC project (the database designer). He added load/save support. Files are in XML format, and have a .pgd extension. He also added multimodel diagram, so that the user can view his schema in different ways. Here are two views of the same design:



And last, we redesigned the options window, so that we could put more options without making the dialog bigger. It follows what LibreOffice and other programs are already doing:


So, despite the summer vacations, we're still going forward and at a good pace.

jeudi, août 18 2011

Plus que trois jours pour proposer une conférence

Hé oui, l'appel à conférences pour le a comme date limite le dimanche 21 août. Assurez-vous d'avoir proposer une (ou plusieurs) conférence si le coeur vous en dit. Nous avons déjà reçu beaucoup de propositions mais peu en français. Car en effet, il y a un track français pour cette conférence européenne sur PostgreSQL. Donc aucune raison d'être timide :)

- page 3 de 69 -