Jonah H. Harris



Reading time: 11 minutes

Tags:   postgresql (208)   open-source (12)   database-internals (5)   extensions (7)   foreign-data-wrapper (5)   hackers (6)   performance (11)   nextgres (1)   enterprisedb (11)  
Category:   interviews   
Interview conducted 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.

Hello! I’m Jonah, the Founder of NEXTGRES. I’ve been a database enthusiast, user, administrator, and developer for many (many) years. Most people who know me know I approach database selection pragmatically, focusing on the needs of the customer, company, or application rather than ideology. That said, Postgres has (obviously) emerged as my preferred choice over time.

While I’m originally from a small city in New Mexico, I now reside in Pennsylvania. My fascination with computers began early, in third grade, with my grandmother’s Commodore VIC-20. Guided by my technically inclined grandfather, I jumped into BASIC programming and later expanded my skills with software and books on assembly, C, and more.

In the mid-90s, my exposure to networking and diverse technologies accelerated when I spent time at Wayfarer Data Service, the ISP owned by the family of my high school best friend, Benjamin Shelton. This experience broadened my horizon quite a bit, introducing me to Linux, BSD, and various other databases.

Throughout my journey, my passion for learning has been constant, nurtured by the kind support of many individuals in my life. This foundation has shaped my career, which revolves around a deep architectural understanding of databases, software, and systems.

Jonah H. Harris
Jonah H. Harris

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

I have five kids: the oldest being 23 and the youngest being 2.5; I don’t really have much free time these days.

Any Social Media channels of yours we should be aware of?

While I haven’t had time to write in years, I do have a blog on Oracle Database internals and I tweet occasionally and also have a Mastodon account. My LinkedIn tracks all my relevant work history.

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

Recently, I read “Amp It Up” and “The 6 Types of Working Genius.” Both offer pretty valuable insights into business and understanding different personalities, which are crucial for building effective teams. Despite my tech background, I’m also fascinated by psychology and business dynamics, particularly in optimizing team performance towards achieving remarkable goals.

Currently, at the suggestion of Curt Kolovson, I’m beginning “Making Databases Work: The Pragmatic Wisdom of Michael Stonebraker.”

Any favorite movie, or show?

I like The Blacklist because, well, Raymond Reddington is my spirit animal. Otherwise, I like Succession for its ruthlessness and Silicon Valley, Halt and Catch Fire, and Mr. Robot for their tech realism and nostalgia.

What does your ideal weekend look like?

Having two consecutive days which require no work? Is there such a thing!?! :)

When did you start using PostgreSQL, and why?

I’ve always been interested in database engines and started playing with University POSTGRES in the 90s. I started using PostgreSQL in 1998/1999 for a project where we compared it with MySQL.

Do you remember which version of PostgreSQL you started with?

I believe the first version of Postgres I used was 6.5. But, I didn’t start doing any serious work with it until 7.0/7.1.

When I was young, I had three career aspirations: film composition, working at Microsoft under Bill Gates, and practicing intellectual property law. I pursued music privately, learning multiple instruments and music theory. However, after consulting with established composers, I realized the unlikely path to success and decided to pursue it again post-retirement.

In terms of Microsoft, while it was a career aspiration, I actually declined an opportunity to work on an MVCC-in-hardware storage project for the BillG Groups, opting for a more compelling offer at myYearbook.com. My interest in intellectual property law led me to briefly explore pre-law studies at New Mexico State University, but I found programming more engaging and ultimately pursued it as my career path.

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

While Postgres is my default, for custom high-performance applications I often use eXtremeDB, a commercial database by McObject. eXtremeDB is designed, first and foremost, as a C-based embedded database, but has so many versatile deployment options (single process, multi-process, multi-threaded, client/server, SQL/NoSQL, columnar and row-oriented storage, multiple transaction managers (no-locking, locking, and MVCC), in-memory-optimized mode, hybrid in-memory/on-disk mode, distributed/sharded/HA mode, replication, hard real-time support, etc.) that it allows you to build a very high performance version of basically anything that needs a database. I also license it with full source code so, unlike most commercial databases, I am able to tweak the database engine itself.

I’m also fond of Oracle Database and, although J‎o‎s‎h‎u‎a D‎r‎a‎k‎e once (fondly) called me, “the Oracle shill of the Postgres Community,” I haven’t used it all that much lately. Still, the latest version has some pretty nice features and actually includes some items it had been missing that have been present in PostgreSQL for quite a while, which is cool as we (in the Postgres community) are often playing catch-up the other way around.

Currently, my primary focus is on NEXTGRES, an innovative set of PostgreSQL extensions that aim to make PostgreSQL drop-in compatible with a diverse range of databases including SQL Server, Oracle Database, MySQL, MongoDB, and more. Much of my database work over the years has been about eliminating the need to rewrite applications during migration, and NEXTGRES is my longtime technology (started in 1999) that streamlines that transition process. Database interoperability and migration are usually terms met with disdain, and I am fully committed to making this easy and painless.

How do you contribute to PostgreSQL?

As I’ve been pretty busy with my full-time job, I haven’t had that much time for community-related work. So, these days, I tend to do smaller patches related to specific performance issues I encounter.

What is your favorite PostgreSQL extension?

There are a number of great extensions for Postgres, but the one I think is probably the best is pg_stat_statements. I also think the in-memory-optimized access methods by PostgresPro and Fujitsu are really cool, although they’re not open source. I also like AWS Babelfish, which is very similar to my own NEXTGRES system. Additionally, TimescaleDB, Citus, and AGE are exceptional when it comes to demonstrating the extensibility of Postgres.

What is the most annoying PostgreSQL thing you can think of? And any chance to fix it?

From an annoyance perspective, there are really two major issues I’ve consistently run into from a consulting-oriented perspective: VACUUM/wrap-around MVCC issues and the lack of query hints. There’s always work to improve VACUUM and several projects are working to improve the overall MVCC/storage approach, so there’s hope there. And, as far as hints go, while some people seem to think I’m in love with them (which I’m not), there are some good plan stability extensions and approaches, and pg_hint_plan works for simple cases, but for large queries with nesting it’s still not great and companies suffer from bad query plans.

What is the feature you like most in the latest PostgreSQL version?

I’m excited by the work being done on asynchronous I/O and moving toward direct I/O. These are projects Inaam Rana and I prototyped at EnterpriseDB back in 2007; we saw pretty good improvements at the time, with the exception of having to make quite a few additional Postgres changes to the buffer cache, storage manager, etc. to be fully realized. These I/O improvements are something Postgres really needs, and the newer implementations are better than ours.

Adding to that, what feature/mechanism would you like to see in PostgreSQL? And why?

While I’m happy with many of the hooks that exist, I feel there should be more of them. Specifically, hooks related to parsing and some recovery-related stuff. It’s a trade-off for extensibility, which is great and reduces the cases where forking the code is required, but I also understand why core isn’t keen on adding them willy-nilly. I do think Postgres would benefit from quite a bit more built-in observability facilities though. And, while I think it’s a pretty large undertaking and would be difficult to mature, making PostgreSQL multi-threaded and/or adding in-database connection pooling would be a win.

Should PostgreSQL have a built-in connection pooler?

Most definitely. The work Konstantin Knizhnik did for PostgresPro is great. While I believe the last open source version is fairly old now, it wouldn’t require all that much work to migrate it into the latest Postgres.

Should PostgreSQL have built-in multi-master replication?

Yes. BDR was, and still is, a pretty solid implementation for common cases. While PGD and Spock both took it in a more proprietary direction, which makes sense for them commercially, I think the base of BDR should really be in core.

Could you describe your PostgreSQL development toolbox?

I’m admittedly oldskool. I do all my development in vim and still use command-line versions of gdb and such. I know IDEs make things quite a bit easier, but I’ve done CLI-based development for so long it would be hard for it to be faster for me in an IDE, I think.

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

In my experience, anyone with a strong problem solving skill-set is able to pick up Postgres fairly easily. From an admin/user perspective, the documentation and such is quite good, but Postgres lacks quite a few niceties found in commercial databases, which often make administration and development easier. A large number of those can be addressed with other open source projects/tools or with custom scripts/code as long as one is able to understand what’s going on, where to look, and what to build. Additionally, a solid understanding of networking and OS-level monitoring, tuning, and triage skills never hurts either.

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

In the past, I’ve preferred PGCon given its attendees and sessions that tended to match my hacking-related interests. But, the proliferation of smaller Postgres conferences is great and I like attending them as well. I last spoke at PGConf.NYC 2023 and I am speaking again at Postgres C‎o‎n‎f‎e‎r‎e‎n‎c‎e 2024.

Do you think PostgreSQL has a high entry barrier?

As a database guy, specifically fond of Postgres, I’m admittedly biased. While I believe the barrier of entry for Postgres is a little higher than MySQL, it’s not nearly as difficult to pick up as most commercial databases for development and administration purposes. From a gap perspective, I do think MySQL and commercial databases tend to have quite a bit better and more targeted “getting started” like documentation and toolsets, which in some ways make them easier for people to try out. But, aside from initial tuning and making sure routine monitoring and the likes are configured correctly, Postgres is easy to manage and requires little ongoing effort to maintain for a large number of common use-cases.

What is your advice for people who want to start PostgreSQL developing - as in, contributing to the project. Where and how should they start?

I think it depends on what the goal of the person is. If it’s internal-related development, then diving into the code and gaining a solid understanding is the best first step, followed by picking up small projects with discussion via -hackers. But, there’s always improvements to documentation and ancillary projects that are useful as well.

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

Given the core open source community and regular forking of Postgres for commercial-related aspirations, many aspects of which are contributed back to the community, I think Postgres is not only here to stay, but will only get stronger over time.

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

I think Postgres should be the default database choice for most projects. Only when it doesn’t fit the use-case or business should something else be considered.

Are you reading the -hackers mailinglist? Any other list?

I’m on -hackers, several topic-specific lists, and most of the other general-purpose lists.

What is your opinion on ORMs?

The amount of money I, and companies I’ve worked for, have made optimizing ORM-generated SQL is pretty high. ORMs are great for fairly simple things and to get things started quickly, and they’re always getting better, but sometimes they’re more trouble than they’re worth.

SQL versus NoSQL databases?

I usually look for the best tool for the job. NoSQL has its place and I’ve used it successfully, and seen it used successfully, many times - especially if the app was designed to make use of it directly in terms of access patterns and such. The only issue with NoSQL, that tends to creep in after-the-fact, is a poor ability to provide the business with information from the data. Poor normalization and NoSQL-optimized access patterns tend to create a mess where it’s generally easier to start pushing the data into multiple data stores (OLTP, OLAP/Analytics, CEP, …) to be able to gain insight; this isn’t easily doable by some companies due to the cost, complexity, and additional skills needed. Converged database models aren’t the most optimal for each case, but tend to provide “good enough” trade-offs that allow a majority of companies to get the most out of the system and Postgres certainly has the ability to provide that.

Anything else you like to add?

I’d probably just say RIP Simon Riggs, you were an amazing guy and member of the community. Long live Postgres!


Share: