Oleksii Kliukin

Tags:   postgresql    adjust    zalando    patroni    postgres-operator    simferopol    berlin    ukraine    germany    istore    pg_view    pageinspect    patch    sql    commit-fest    community    fosdem    pgcon    pgconf-europe    zheap    pg-cryogen    postgres-fdw    lailover    logical-replication    vscode    git    hackers    pgsql-hackers    pgsql-bugs    postgres-meetup    kubernetes   
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, your hobbies and where you are from.

Hi, my name is Oleksii (people also call me Alex). I work as a Database Engineer at Adjust.com, improving their PostgreSQL infrastructure. Before that, I worked on Patroni and the Postgres Operator at Zalando. I’m originally from Simferopol, Ukraine. I moved to Germany around 7 years ago. I live in Berlin with my wife and two sons, three years old and 7 months old. When I have time, I enjoy spending it outdoors, hiking, cycling, or running.

Oleksii Kliukin

Oleksii Kliukin

When did you start using PostgreSQL, and why?

I’ve started working with PostgreSQL at my first programming job by debugging a segfault in the backend process. It was around 2003, at that time I was working on a custom closed-source fork of PostgreSQL capable of doing binary replication. I haven’t written it from scratch but inherited an already existing codebase. At that time no-one from the community was regularly reviewing the code and it was full of opportunities to study Postgres internals the hard way by working on eliminating various crashes. I think it was PostgreSQL 7.3. Few internals-related docs or presentations were present at that time, I was figuring things out by reading source code and asking for help on IRC.

I have a master’s degree in Applied Math from Taurida National University in Simferopol. While more theory than practice, formal education gave me a solid understanding of the relational model and tools to evaluate algorithms, as well as many examples of rigorous mathematical proofs. That helps when looking for the corner cases during code review, figuring out why certain operations are slow or reading database research papers.

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

PostgreSQL is my favorite database. I’ve been exposed to other database systems, like Oracle, MySQL , Redis or Cassandra in the past. I’m using primarily PostgreSQL at my current job.

At Adjust I’m helping to maintain and improve our open-source extensions, i.e istore. Our Postgres-based data-pipeline is also quite good at finding some rare Postgres race conditions that I report them to the community mailing lists and fix from time to time. I’m also working on a command-line UI tool to replace pg_view with something more modern; while there is no shortage in top-like Postgres solutions, I’m not completely satisfied by any of them.

How do you contribute to PostgreSQL?

I contribute to PostgreSQL by sending some bug reports and patches to fix it. I hope to work more on the patch reviews/features in the future.

Any contributions to PostgreSQL which do not involve writing code?

I’m one of the organizers of Berlin PostgreSQL Meetups. We have had many speakers and talks since 2015. I also volunteered to help with a couple of conferences in the past and can definitely recommend offering your help there to be more involved in the PostgreSQL community.

What is your favorite PostgreSQL extension?

My favorite one is a contrib extension called pageinspect. It gives you an amazing possibility to peek inside your database pages at a low level. It’s relatively simple, but instrumental in both understanding how PostgreSQL stores data and diagnosing data corruption issues.

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

Many of those that are considered Postgres limitations will be addressed with upcoming implementations of the alternative heap storages, like zheap or pg_cryogen The most annoying one for me so far is that logical decoding/replication stops working after a failover, that limits its usefulness, particularly in cloud-based environments.

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

Pluggable storage mechanism. It provides a machinery to redefine how PostgreSQL stores table data and lays the groundwork for addressing many more use-cases, like append-only, compressed, or column-oriented storage with future extensions.

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

I’m looking forward to the improvements in postgres_fdw, in particular, support for parallel append and atomic writes over multiple foreign tables in one transaction (right now, if there is a network or other issue, the data may end up persisted on some foreign servers but not the others).

Could you describe your PostgreSQL development toolbox?

I’m experimenting with VS.code to work on Postgres core and extension with some good results: it’s already possible to use it for many activities (browsing the code, building, debugging) almost like a full-scale IDE without the burden of mastering yet another language just to configure your editor the way you like. For a quick configuration change or text editing, I use vim. My preferred system is MacOS, I compile Postgres with clang and use lldb to debug it. I use iterm as a Terminal instead of a built in terminal.app, as it supports split-screen sessions and works nicely with tmux. Last, but not least, I use mailwrap to reformat emails in built-in Mail.app to fit in 80-character lines for better readability. There is also no way I cannot mention built-in psql as the best PostgreSQL client out there.

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

Be curious and just try things out! PostgreSQL has excellent reference documentation and the source code has a lot of comments, in many cases, you can observe what PostgreSQL does and use those references to explain why. Also, don’t limit your SQL to basics, learning more advanced features like window functions, CTEs, LATERAL joins, and others will pay off with smarter queries and fewer lines of application code in the future.

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

I typically clone PostgreSQL from my own fork on github instead of using the the repo at git.postgresql.org. I use GitLens VS.code plugins to show the link to the last change for the line under the cursor. I push my own branches back, so that they are not lost.

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

I typically try to attend FOSDEM, PGConf.DE (PostgreSQL conference in the German-speaking world), PGCon, and PGConf.EU, regularly submitting talks to those. There are other conferences in Russia and the US I’m attending/speaking from time to time. I’m looking forward to PGDay.UA, the first Ukrainian PGDay, later this year.

Do you think Postgres has a high entry barrier?

No, the entry barrier is not higher than with other database systems. I find PostgreSQL behavior predictable and consistent and the documentation provides a really good reference for all major topics. There are tons of tutorials out there on how to get started and a number of conference videos highlighting how different organizations use PostgreSQL in production. There are many conferences in almost all parts of the world you can take part in, as well as many local meetups. Last, but not least, it’s the community that makes PostgreSQL a successful open-source project (there is a saying that some projects have a community, but PostgreSQL is a community). The spirit of sharing what you’ve learned, a desire to help each other and the generally welcoming attitude toward newcomers makes the project unique in the open-source world.

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

There are many ways to contribute to PostgreSQL, not just the source code. For those interested in PostgreSQL development, I’d suggest starting with the wiki at https://wiki.postgresql.org/wiki/Developer_FAQ. Contrary to the advice in that document, don’t jump on the TODO items right away. Subscribe to psql-hackers, pgsql-committers and pgsql-bugs. Go to the commitfest app, where the community tracks the status of ongoing patches, find an item that is interesting for you in the open commitfest, read the mailing list discussions, apply the patch locally, observe how it works and how it is supposed to work according to the documentation or the author’s description, read at the source code, post your observations to the thread. Look at last day’s commits from pgsql-committers and try to make sense of which problems they are solving (and perhaps follow the discussion links in the commits if you are interested). You can also look for new submissions at pgsql-bugs and help reproducing and fixing the issues posted there.

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

Given the diverse and mature community, excellent product and growing support from many companies (with no total control over the project by any of them) I think PostgreSQL is there to stay.

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

For both. You can also make PostgreSQL your side project!

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

I read threads on -hackers, watch recent commits at -committers, look for new threads in -performance and -bugs.

What other places do you hang out?

Mostly mailing lists. I’m not regular on either Slack or IRC, but I visit both from time to time.

Which other Open Source projects are you involved or interested in?

Not many outside of the PostgreSQL ecosystem. I try to submit bugs to open-source projects when I find them. I’m watching the development of the Linux kernel, Kubernetes, and Go ecosystem and I’m quite happy that such influential projects are open-source.

Anything else you like to add?

Stay healthy. Use Postgres!