Greg Sabino Mullane



Tags:   postgresql    postgres    perl   
Category:   Interviews   
Interviewed by: Andreas Scherbaum

PostgreSQL is the World’s most advanced Open Source Relational Database. The interview series “PostgreSQL Person of the Week” presents the people who make the project what it is today. Read all interviews here.

Please tell us about yourself, and where you are from.

My name is Greg Sabino Mullane, and I live in Pennsylvania (USA). I have been working remotely a long time - since before it became necessary this year - as a programmer and a DBA (database administrator).

Greg Sabino Mullane

Greg Sabino Mullane

How do you spend your free time? What are your hobbies?

Well, free time has been a bit scarce lately, what with a pandemic going on and the kids NOT going off to school during the week. So mostly at-home family activities, watching shows1 with my wife, and trying to beat the game Dead Cells2.

Social Media?

Don’t do too much of that, other than blogging. My meager offerings:

Last book you read? Or a book you want to recommend to readers?

I am making my way through Guns, Germs, and Steel: The Fates of Human Societies by Jared Diamond. Fascinating book so far.

I recommend Terry Pratchett for anyone who has not read him. Start with The Wee Free Men or The Colour of Magic.

Any favorite movie, or show?

This is the golden age of television, so the list of favorites changes quite often. But some that we have really enjoyed watching or rewatching lately are The Good Place, Avatar: The Last Airbender, The Great British Baking Show, Floor is Lava, and Nailed It. All of those are particularly family friendly as well. Okay, not so much The Good Place, but it is so forking good.

When did you start using Postgres, and why?

When I first started working as a Perl/C programmer, the company databases in use were Oracle and SQL Server (and before that, I even used dBase III (!) while in the military3). In the very early days of the WWW, I wrote my own bulletin board system. My first naïve iteration, full of flock4 calls, did not scale very well, so I quickly looked for a database to support it. I immediately came across MySQL as a free option that claimed to be a fully functional database system. That experiment only lasted a few hours, as I quickly realized some of its major limitations. Looking for something superior (yet free), I came across Postgres, and, twenty years later, I haven’t found anything better5.

Which version of Postgres did you start with?

I started using Postgres at version 6.5. Wow, how things have improved since then (416 versions at this moment! 6). I think it was 7.1 when I really started understanding the source code and contributing back to this awesome project.

Have you studied at a university? Did your study help you with your current job?

I actually have a degree in Microbiology and Cell Science from the University of Florida. However, before my degree was finished, I already had a full-time job at the University’s computer department (mostly C and DOS; Perl came a little later). My studies only aligned with my career once, when I was working at the National Human Genome Research Institute.

What other databases are you using? Which one is your favorite?

Almost exclusively Postgres. I sometimes bump into other things from time to time in my journeys: Oracle, MongoDB, Redis, MySQL, and a host of others both known and not so well-known. Every time I do, it reinforces for me the many ways that Postgres excels. One of the things that makes my life a happy one is not having to use SQL*Plus ever again7.

If I had to pick a favorite, it would be SQLite, which is an impressive piece of software.

What sort of coding projects do you work on?

I maintain the Perl driver for Postgres, DBD::Pg. I also wrote and/or maintain a slew of other projects related to Postgres, including check_postgres, Bucardo, and tail_n_mail. I helped whip the Postgres port for MediaWiki into its current shape, and also created the wiki at wiki.postgresql.org. I like to poke at the Postgres code as well, although I really need to get more serious about that again and contribute more. My favorite contributions are probably \timing and ON_ERROR_ROLLBACK (psql is miles ahead of any other database CLI!).

How about non-code contributions?

I’ve always been heavily involved in the advocacy efforts. I am on the funds group and attend conferences. I like to hang out on the various free forums, to both help and learn. Shout out to the cool people in the #postgresql channel - you know who you are. Also a big hello to everyone in the new parts of town: Slack and Discord.

I’ve also been a member of Pg.US, helped to moderate the mailing lists, and blog about Postgres. Actually, I’ve been on a sabbatical from blogging for a while, but I really should get back into that8.

What is your favorite Postgres extension?

There are so many useful extensions! You cannot make me pick just one, I refuse!

Many are not needed day to day, but are there when you need them, like that bottle of saffron on your spice rack9. I think if I had to pick one (an extension, not a spice10), it would be pg_stat_statements : I cannot imagine running a production database server without it.

Of course, PL/pgsql is now technically an extension, so it would be at the top of a list as well, as it is indispensable. I love PL/Perl as well, although I don’t use it as much as I once did. PL/R is amazing as well.

Some really neat extensions for special purposes include auto_explain, dblink, and pg_freespacemap.

Finally, there are two extensions that are huge and contain a ton of useful functions for their specific domains and deserve a mention: pgcrypto and PostGIS.

What is the feature you like most in the current Postgres version?

The latest version as I write this is Postgres 13, and again, it is hard to pick just one thing. One feature I really like is the new concept of trusted extensions, which allows non-superusers11 to install certain extensions.

Any things about Postgres that annoy you?

So, not problems per se, but annoyances? Sure, I can come up with a few:

  • The name. Come on, it’s 2020. Nobody wants to trip over our silly portmanteau anymore. Just rename it Postgres already12.

  • The pg_hba.conf file. Horrible name, completely non-intuitive13. The insides are not much better, but at least have (necessarily verbose) documentation.

  • No bug tracker. That’s pretty crazy. I know Tom Lane fixes all bugs within 10 minutes of receiving an email about it, but still…

  • pg_upgrade still doesn’t handle statistics14

What features would you like to see in Postgres?

Um, all of them? :) Tons of little things, and quite a few big things. Custom compression methods, a better checksum system, true in-place upgrades, better OOM handling, more vacuum improvements, solving the 32-bit transaction rollover issue, improved auto-tuning, and a smarter optimizer. Off the top of my head.

Could you describe your Postgres development toolbox?

Nothing very exciting: a Unix box and all its usual tools (emacs15, git, gcc, gdb, strace, etc.)

For the Perl side of things, I make heavy use of Devel::Cover, and Devel::NYTProf

Which skills are a must have for a Postgres developer/user?

Developer and user are very different skill sets. I’ll focus on developer. Technical skills include being comfortable on the Unix command-line, good knowledge of C, ability to do basic git commands16, able to read diffs, knowing how to use email, and building Postgres from source - a lot17.

Non-technical skills are email etiquette, the art of code reviews, having a thick skin, being respectful to others in the community, and having humility.

For deeper work, it is helpful to know Perl for some utilities, flex/bison for the parser, Makefiles in general, advanced git commands, database theory, basic computer science theory, excellent Unix skills, and to be very comfortable with gcc (plus other compilers too these days!).

Do you use any git best practices, which makes working with Postgres easier?

Nothing too exotic. Always remember to git clean -dfx before building a different branch. Commit often, then use git commit --amend and git rebase -i to clean things up before pushing or creating a patch.

Which Postgres conferences do you visit? Do you submit talks?

I used to attend a lot of conferences, but that has slowed down in the last few years. Of course, everything changed when the fire nation attacked COVID-19 happened. So now, who knows? I have attended some of the virtual ones this year.

I always submit at least one talk when I go to a conference.

Do you think Postgres has a high entry barrier?

As a user? Yes, it’s a little unintuitive and obtuse. There are some nice tools to gloss things over (Debian, other) but at the end of the day, you cannot avoid having to do things like editing pg_hba.conf and understand what effective_cache_size is, to really use it well. On the other hand, it’s a breeze compared to the big commercial databases!

What is your advice for people who want to start contributing to Postgres?

Start on the edges. Look in github for issues you can tackle in your favorite language’s driver, or a tool that happens to use Postgres. Then tackle some of the smaller utilities, such as pg_dump, psql, etc. It’s a pretty deep dive after that point, I’m afraid, but the Postgres source code is extremely well documented and fairly free of technical debt, so you will have that going for you. Starting at the edges also allows you to build a thick skin, which you will need as you head deeper into the core, because your submission will be heavily reviewed and almost certainly rejected at first (the flip side of having such high quality code).

There are also plenty of ways to help that are not code - advocacy, blogging, bug reports, documentation, testing, reviewing, sysadmining.

Do you think Postgres will be here for many years in the future?

The canonical answer is “of course!” but this is the year 2020, so all bets are off. I think it’s reaching another critical point in its life, where scalability and enterprise stability are going to present real challenges as we start running into some tough problems.

Would you recommend Postgres for business, or for side projects?

Is that meant to be an X && Y question, or an X || Y question? That comma really confuses things! The answer is both, of course. I’ve been using it in side projects for a long time (earliest timestamp in the still running bulletin board18 is from 1999!).

Are you reading the mailing lists?

You mean, do I have a fire hose attached to my mouth? No, sir, I do not. I read most of pgsql-hackers, most of pgsql-performance, and some of pgsql-general. Like nearly everyone else these days, I mostly scan subject lines. I also read many of the lower volume ones, such as pgsql-interfaces and pgsql-advocacy.

Honestly, the lists are not as important as they used to be - with the possible exception of pgsql-hackers, there are many other options for people these days that are preferred by most over mailing lists: stackoverflow, twitter, slack, etc.

Anything else you like to add?

Walnuts do NOT belong in brownies!

Please feel free to say hello if you see me on any of the various fora. To keep things easy for everyone, I will usually be G_SabinoMullane or Greg Sabino Mullane.

One of the great things about Postgres is the community. Really nice to see these interviews - thanks Andreas!


  1. Netflix: don’t have a pandemic without it. ↩︎

  2. I’m still on BC4, but on the other hand I’m pretty good at BC4. ↩︎

  3. Though not my day job, so to speak; I was a Combat Engineer. ↩︎

  4. The word “flock” is a wonderful example of a portmanteau, combining “file” and “lock”. On the other hand, PostgreSQL is a very ugly, awkward example of a portmanteau. ↩︎

  5. These footnotes are dedicated to my wife, who I also discovered over 20 years ago and have never found anything better! ↩︎

  6. Well, roughly 416. The earlier versioning gets tricky. ↩︎

  7. Worst. CLI. Ever. ↩︎

  8. I like to write - can you tell? ↩︎

  9. Garlic, of course, does not belong there, but maintains a place of honor near the salt ↩︎

  10. For spice, I choose cinnamon ↩︎

  11. What should we call those - Mortals? Normals? Muggles? ↩︎

  12. We came so close in 2017 with version 10, but -core chickened out19 ↩︎

  13. The “hba” stands for “host-based authentication”, which isn’t even a particularly accurate description anymore. ↩︎

  14. Perhaps if I emailed it in as a bug report? ↩︎

  15. (Obligatory vim insult here) ↩︎

  16. After all these years, I’m almost at intermediate-level git. It’s a deep program. ↩︎

  17. At any one time, I probably have 10+ Postgres instances on my laptop for development. Thank goodness for nearly unlimited Unix port numbers! ↩︎

  18. Latest timestamp: five minutes ago ↩︎

  19. Just kidding, gentlemen, I know it is a tough decision20. ↩︎

  20. But seriously, just rip the bandaid off. ↩︎