• Trusted by:

Hire PostgreSQL developers and engineers

Ivan Voras, Croatia

Member since June 18, 2014
Ivan is primarily a back-end developer with 10+ years of experience in architecting and implementing server-side solutions, including non-web-related distributed platforms such as Bitcoin, chat servers, and general client-server solutions. He has handled DBA operations, developed modules for PostgreSQL, operating system kernel modules (FreeBSD), and new algorithms. He is interested in general client-server problems and distributed apps. Click to continue

Raoni Boaventura, Brazil

Member since March 9, 2012
Raoni is an experienced software developer and who has contributed to a wealth of projects using Ruby on Rails, JavaScript, and PHP on top of many other programming languages and frameworks. He is an excellent problem solver, and a great communicator as both a team member and a team lead. Click to continue

Vitaliy Morarian, Ukraine

Member since June 14, 2013
Vitaliy is a software engineer with 10+ years of experience in the development, design, and architecture of distributed systems. Recently, he's focused on the use of Scala and Java technologies. He's an efficient communicator and a great programmer. Click to continue

Andrii Kostenko, Ukraine

Member since May 22, 2013
Andrii is an accomplished software engineer, experienced in creating large-scale, complex applications. He has worked both as a back-end and front-end engineer. He excels at planning and implementing intricate solutions to technical problems, including determining which technologies should be used. Click to continue

Emre Hasegeli, Germany

Member since August 16, 2013
Emre has maintained software systems and administrated databases for many years, helping him to become an excellent systems designer. He enjoys being involved in all phrases of software development from product design to hardware selection. He likes to work with people who ask clever questions. Click to continue

Martin Chikilian, Argentina

Member since October 3, 2011
Martin has worked as a professional Python developer since 2007, although his career in IT began in 2001. He is a full-stack engineer, having administered operating systems and networks for so many years. His recent interests are web-development and Python (namely with Django). Click to continue

Johan Hernandez, Colombia

Member since January 3, 2012
Johan is a mobile app and cloud back-end developer with over 15 years of experience. He's been telecommuting for startups in the USA since 2010. He has worked with enterprise stacks for a number of years, but more recently his primary focus has been on building native apps for mobile and desktop (Mac, iOS, Android and Windows) using Swift, Objective-C, Java, Kotlin, and C#. He also builds his own RESTful back-ends with Rails, Node, and Golang. Click to continue

Reuben Firmin, United States

Member since November 9, 2013
Reuben is an experienced software architect and engineer with significant technical and project management experience. He boasts expertise in big data, data warehousing, and scalable and distributed applications. He excels with Java, relational and NoSQL databases, and web technologies. Click to continue
PostgreSQL Resources
Trustpilot
Toptal on TV
"Toptal is killing it, it kind of owns this market."
Andrew Ross Sorkin Reviews Toptal
Cnbc 02e66b
"Tech companies simply cannot find the quality employees they want to hire. The solution: Toptal."
Liz Claman´s Review of Toptal
Fox 7ef901
Toptal in the press
“Despite accelerating demand for coders, Toptal prides itself on almost Ivy League-level vetting.”
Selina Wang
“Toptal allows corporations to quickly assemble teams that have the right skills for specific projects.”
Steven Norton
A hiring guide
The Vital Guide to PostgreSQL Interviewing

PostgreSQL has been around for a while and its popularity has grown enormously during the last couple of years. With such a demand for PostgreSQL talent, some developers have simply added it to their résumé because they think they will get by with the basics, but they fall short when more advanced tasks are put on their plate. To help you find developers that truly understand the tool, this hiring guide takes you through the topics and questions that PostgreSQL experts should know well.

Testimonials
“We had a wonderful experience with our Toptal consultant. He was very reliable and punctual, delivering excellent work on a budget—we will certainly be using him again!”
Barbara Karpf
President @ DecoratorsBest
“We're a small firm with big dreams. After trying 4 or 5 local or outsourced developers, we were out of options. I'd heard of Toptal, but was worried that my company wasn't big enough for them. After calling them up, I found out that I didn't need to meet any minimum budget and was immediately put in touch with a developer to talk through my problems and goals. A day later, he got back to me with a list of possible solutions. After 9 months and 5 developers, Toptal got me my solution in a single week at a price I could afford.”
Kevin Ramirez
Co-Founder @ SixtyVocab.com
“I needed help, and fast. I did not want to hire a random coder I met online- I was worried about security, and many other issues. Toptal was there when I needed them- and has been fantastic to work with. Outsourcing is full of terrible stories- Toptal is the story that is the giant exception. I give them my highest recommendation.”
Michael Feder
Founder & CEO @ PrayerSpark
“One of their engineers from Colombia has joined our team as a full-time developer for more than 6 months, sometimes flying to work on-site in New York City with us. He is one of the best developers I've ever worked with.”
Carter Cleveland
CEO @ Artsy
“I've gotten 1 developer from Toptal so far. He's a really good part of our team. I'm planning on adding another from Toptal in the near future. Toptal is a big help these days when recruiting is a big part of my job.”
Aaron Rubin
Founder & CEO @ ShipHero
“We've been incredibly pleased with our experience working with Toptal thus far. Their team worked quickly and efficiently to isolate the needs of our project, and they paired us with an appropriate developer within a couple days who we quickly contracted after a great interview. The work performed on our project was top-notch, and we can’t wait to make use of Toptal’s resources again.”
Ryan Staake
Owner @ Pomp&Clout
“Sergio was an awesome developer to work with. Top notch, responsive, and got the work done efficiently.”
Dennis Baldwin
Chief Technologist and Co-Founder @ PriceBlink
“Our experience with Toptal was very good. We had an open ended development project when we got started and the programmer from Toptal was very helpful, working with us on everything from the top level outline all the way down to development and delivery of functioning code." ”
Michael Milton
VP of Engineering @ SLANTRANGE
“In Higgle's early days, we needed best-in-class developers, at affordable rates, in a timely fashion. Toptal delivered! Higgle enjoyed working with Toptal and we appreciate their professionalism.”
Lara Aldag
CEO @ Higgle
“With Toptal, we are able to find talented developers in a matter of weeks instead of months. The quality of talent they supply is extremely high as the developers are able to immediately onboard and ramp incredibly fast.”
Zac Carman
CEO @ ConsumerAffairs
“The Toptal process was very organized, personable, and professional. They get to know you and your project idea, and then quickly provide you with several of the world's best developers, who will work hard to achieve your vision. I found a great developer in only a few days and was able to turn my idea into a functional product.”
Ben Woratyla
CEO @ Book Swap
“With the pressure on and millions watching the Cleveland Cavaliers during the NBA Playoffs, Toptal delivered the talent and expertise needed to launch a brand new fan engagement platform.”
Conor Kenney
Director of Professional Services @ Cleveland Cavaliers
“We've used Toptal developers multiple times for multiple projects, and they've always been world-class—regardless of whether they've been from South Africa, Brazil, or the United States.”
Alex Haro
CEO @ Life360
Hire a top PostgreSQL developer now.
Toptal is a marketplace for top PostgreSQL developers, engineers, programmers, coders, architects, and consultants. Top companies and start-ups choose Toptal freelancers for their mission critical software projects.
Full
profile
Ivan VorasCroatia
Ivan is primarily a back-end developer with 10+ years of experience in architecting and implementing server-side solutions, including non-web-related distributed platforms such as Bitcoin, chat servers, and general client-server solutions. He has handled DBA operations, developed modules for PostgreSQL, operating system kernel modules (FreeBSD), and new algorithms. He is interested in general client-server problems and distributed apps.
[click to continue…]
PostgreSQLPythonSQLCDjangoSQLiteLAMPDatabase DesignBack-end Development
Hire
Full
profile
Raoni BoaventuraBrazil
Raoni is an experienced software developer and who has contributed to a wealth of projects using Ruby on Rails, JavaScript, and PHP on top of many other programming languages and frameworks. He is an excellent problem solver, and a great communicator as both a team member and a team lead.
[click to continue…]
PostgreSQLCSS3C++PHPCoffeeScriptRubyHTML5JavaScriptRuby on RailsAngularJSTwitter BootstrapFacebook APIjQuery UI
Hire
Full
profile
Vitaliy MorarianUkraine
Vitaliy is a software engineer with 10+ years of experience in the development, design, and architecture of distributed systems. Recently, he's focused on the use of Scala and Java technologies. He's an efficient communicator and a great programmer.
[click to continue…]
PostgreSQLJavaHibernateGrailsSpring MVC
Hire
Full
profile
Andrii KostenkoUkraine
Andrii is an accomplished software engineer, experienced in creating large-scale, complex applications. He has worked both as a back-end and front-end engineer. He excels at planning and implementing intricate solutions to technical problems, including determining which technologies should be used.
[click to continue…]
PostgreSQLPerlDjango
Hire
Full
profile
Emre HasegeliGermany
Emre has maintained software systems and administrated databases for many years, helping him to become an excellent systems designer. He enjoys being involved in all phrases of software development from product design to hardware selection. He likes to work with people who ask clever questions.
[click to continue…]
PostgreSQLPythonPL/pgSQLSQLMySQL
Hire
Full
profile
Martin ChikilianArgentina
Martin has worked as a professional Python developer since 2007, although his career in IT began in 2001. He is a full-stack engineer, having administered operating systems and networks for so many years. His recent interests are web-development and Python (namely with Django).
[click to continue…]
PostgreSQLPythonGitGitHubMySQL
Hire
Full
profile
Johan HernandezColombia
Johan is a mobile app and cloud back-end developer with over 15 years of experience. He's been telecommuting for startups in the USA since 2010. He has worked with enterprise stacks for a number of years, but more recently his primary focus has been on building native apps for mobile and desktop (Mac, iOS, Android and Windows) using Swift, Objective-C, Java, Kotlin, and C#. He also builds his own RESTful back-ends with Rails, Node, and Golang.
[click to continue…]
PostgreSQLSwiftJavaObjective-CJavaScriptRubySQL-99C#Golang.NETRuby on RailsCocoaPodsNode.js
Hire
Full
profile
Reuben FirminUnited States
Reuben is an experienced software architect and engineer with significant technical and project management experience. He boasts expertise in big data, data warehousing, and scalable and distributed applications. He excels with Java, relational and NoSQL databases, and web technologies.
[click to continue…]
PostgreSQLJavaAgile Software Development
Hire

The Vital Guide to PostgreSQL Interviewing

PostgreSQL has been one of the more popular open-source object relational database systems since its initial release nearly two decades ago, but that popularity has grown enormously during the last couple of years. We can get a sense of this by looking at db-engines.com, which calculates a “popularity score” based on factors such as number of questions on stack overflow, job offers, and number of results on the major search engines, and the like. Its graph shows a 72,35 percent increase in the popularity of PostgreSQL from January 2013 (score: 167.475) to February 2016 (score: 288.657).

With such a demand for PostgreSQL talent, some developers have simply added it to their résumé because they think they will get by with the basics, but they fall short when more advanced tasks are put on their plate.

To help you find developers that truly understand the tool, this hiring guide takes you through the topics and questions that PostgreSQL experts should know well.

Even if a candidate is a master of SQL, it doesn’t necessarily mean that s/he is a master of PostgreSQL.

SQL Basics

Even if a candidate is a master of SQL, it doesn’t necessarily mean that s/he is a master of PostgreSQL. Yet, if the candidate is not proficient in SQL we know for sure that s/he is not a master of PostgreSQL. A good Postgres DBA should know intimately the principles and use of standard SQL. PostgreSQL supports the majority of features required by the SQL standard ISO/IEC 9075:2011, so a big part of PostgreSQL usage relies on it.

We can weed out a large portion of candidates with a high amount of confidence by starting the interview with SQL principles, concepts and usage: the different types of JOINS clauses, UNION, subqueries and the difference between HAVING and WHERE. Toptal’s list of 20 Essential SQL Interview Questions is a good place to start.

SQL vs. NoSQL

When a SQL database is in order, PostgreSQL is the best database for the job most of the time. While the differences between PostgreSQL and other SQL databases, such as MySQL, might be debated, it is more valuable in the hiring process to discuss the differences between PostgreSQL and NoSQL, such as MongoDB. A strong candidate knows when Postgres is the right tool; they don’t always use/recommend Postgres because it’s the only thing s/he knows.

Q: When is it appropriate to use PostgreSQL instead of a NoSQL database and how can you tell?

Relational databases, such as PostgreSQL, have advantages and disadvantages compared to NoSQL databases, and understanding those weaknesses and strengths is important. Using the Brewer Theorem (also known as the CAP theorem) is handy for determining which type of database is the best one for the job.

The Brewer Theorem is built on the assertion that a distributed application cannot simultaneously guarantee the following three systemic requirements: consistency, availability and partition tolerance. Depending on which two of these three are the application’s highest priority, it can be decided which database is the best fit. PostgreSQL is better when consistency and availability are needed, while other combinations may require a NoSQL solution. Here’s a more in depth look at both options:

PostgreSQL Strengths:

Transactionality: PostgreSQL supports transactions at the database level while NoSQL databases do not. There are some methods for implementing transactions in NoSQL, but these are done at the application level instead of in a database level, so they have a toll on performance.

Aggregation functions: PostgreSQL implements SQL standard aggregation functions, as well as some of its own, with high performance. In NoSQL, there are techniques for getting decent performance, but it doesn’t come close to the performance achieved by PostgreSQL.

Joins: Relational databases, such as PostgreSQL, are excellent at querying data that is stored across different tables by using the different types of joins, while NoSQL databases often need to perform multiple queries.

NoSQL Strengths:

Semistructured data: NoSQL databases have a big advantage over relational databases when it comes to handling semistructured data and horizontal scalability. While PostgreSQL has some support for this with the use of the JSONB datatype, NoSQL databases are still the superior choice.

Scaling: NoSQL databases (specifically, the ones that are BASE compliant) are better at scaling write operations since they lack a number of functionalities that ACID compliant databases have, such as referential integrity enforcement.

With these differences and the Brewer Theorem in mind, let’s look at two case study applications:

  • Financial applications need strict data consistency and transactionality, and the nature of the app means running multiple complex reports. In this case, PostgreSQL is the best tool.

  • Social networks (successful ones) are expected to scale at a massive volume and their data is not well structured. Furthermore, the database needs to constantly scale the app horizontally, too, as more and more fields are added in tandem with new app functionalities. Here, a NoSQL database is the better option.

Proof of Mastery

By this point we should have weeded out the weaker talent, but we still need to find the developers that are truly Postgres masters, the ones that will help us get the most out of our database and are able to handle the inevitable, daunting tasks that come along.

Q: “We need to query a knowledge base with entries for several topics (each entry has a title and a content).” How would you accomplish this using Postgres?

The Subpar Answer

If a developer is not an expert in PostgreSQL, and thus not familiar with its full text search functionality (which we will discuss further), s/he might answer something like this:

SELECT * FROM posts WHERE title ILIKE ‘%query-string%’ OR content ILIKE ‘%query-string%’;

A candidate that answers this way is not a prime choice. This approach is not using PostgreSQL’s awesome capabilities and the quality of the results would be poor:

  • If, for example, our query-string is a pluralized word and we have an entry with the singular form of that word, that result will not be included (not to mention words such as “do” and ”does”) since this method only looks for inclusion of the query-string in the title or content. Likewise, if we have two separate words in the query-string, no results will come up unless they are in the same order and the same form.

  • There’s no guarantee of relevance since there is no way to rank these results by the number of occurrences in the content or numbers of exact word matches, and so on.

  • Performance is also a problem with this approach. Since there is no index support, this query can be extremely slow even in fairly small databases.

The Right Answer

So, how can this problem be solved in a better way using some of PostgreSQL’s cool features L? Full text search.

The full text search feature is based on the @@ operator (known as a ‘match operator’) that returns true if a tsvector matches a tsquery. tsvector is a search type that represents a document, a sorted list of normalized words used for text searches. A tsquery is a search type that represents a query. A document is the ‘unit of searching’ that will often be a column of a table or a concatenation of multiple columns (even from multiple tables), such as this:

SELECT title || ‘ ‘ || content AS document FROM posts;

We can use the tsvector this way, but we cannot directly use tsquery() to convert our query-string into a tsquery since it expects a string with boolean operators that separate lexemes (like & for ‘and’, | for ‘or’, and ! for ‘not’). To convert user-written text into a tsquery, we can use the function plainto_tsquery. The resulting query will look like this:

SELECT * FROM posts WHERE tsvector(title || ‘ ‘ || content) @@ plainto_tsquery(‘query-string’);

Note: depending on your PostgreSQL configuration, you may need to manually specify the dictionary to use in order to have some cool features such as “stemming”. To order the results by relevance we can use the ts_rank() function, which accepts a tsvector and a tsquery as parameters.

Q: What is ‘high availability’, when should you implement it, and how do you do it?

High availability refers to the capability of the database to remain operational for a higher percent of the time in comparison to non-redundant servers. This is also known as having a high service level.

High availability can be achieved with redundant database servers working together to replace the primary server in case of failure. These standby servers (also known as “slaves”) track the changes of the primary, “master” server. While only primary servers may modify the data (perform read/write operations), standby servers have different roles:

Hot standby servers accept connections for the sole purpose of serving read-only queries. This type of standby server is often used for load balancing.

Warm standby servers do not accept any connections, they only follow the changes made to the primary server. If they are promoted to primary, they can start accepting connections and modify data.

When to Implement High Availability

PostgreSQL has many features for facilitating high availability, but it’s not always appropriate to implement high availability. There are many instances where one would decide against high availability (or some type of it), so it is difficult to come up with a simple guideline, but the deciding factor should always be the needs of the business. Generally, implementing high availability is a detriment to performance and increases the overall complexity of the architecture, thus understanding the gains and losses of each decision is key.

It’s easy to give the above answer as a catch-all cop out, so the candidate should explain a couple specific cases to demonstrate understanding:

  • Scenario 1: A marketing company has a newsletter application. Requests to the application are scheduled (as are the read/write operations to the database) and do not depend on demand. A couple of hours of downtime per month is not likely to impact the business, so high availability doesn’t give much benefit for the cost.

  • Scenario 2: A SaaS company offers a service-level agreement of 99 percent uptime with their 500 thousand users. This company is built on a high availability implementation.

Implementation with Transaction Log Shipping

There are multiple strategies for implementing high availability, but here we’ll cover “transaction log shipping” on a hot standby. PostgreSQL continuously stores all transactions using write-ahead logging (also known as “WAL”). These log entries, among other things, are used for keeping the standby servers up to date by connecting to the primary server and fetching the logs.

For the implementation exercise, assume that the primary database is already functional and that the standby database is an exact copy of the primary database:

In the primary server:

a) Create a user for the replication:

sudo -u postgres createuser -U postgres replicator -P --replication (enter password when prompted)

b) Edit pg_hba.conf to allow connections for replication:

host replication replicator standby-server-ip/32 md5

c) Edit postgresql.conf to set the wal_level to hot standby:

wal_level = hot_standby
archive_mode = on
archive_command = 'cp %p /path/to/archive/folder/%f' 
max_wal_senders = 1 # Enter the number of standby servers

Note: You may need to create the folder assigned to archive_command; a good place is /var/lib/postgresql/<postgres-version>/main/mnt/server/wal_archive. Don’t forget to change the ownership to the postgres user after you create the folder. Depending on your network setup you might need to add this ip address to the list of addresses to listen:

listen_addresses = 'localhost, <primary-server-ip>'

In the standby server:

a) Delete the default data directory in the ‘standby’ server and copy the files from the data that directory in the ‘primary’ server using the ‘pg_basebackup’ utility:

rm -r /var/lib/postgresql/9.3/main
sudo -u postgres pg_basebackup -h <primary-server-ip> -D /var/lib/postgresql/<postgres-version>/main -U replicator -v -P --xlog-method=stream

b) Edit postgresql.conf to enable hot standby:

hot_standby = on

c) Create /var/lib/postgresql/<postgres-version>/main/recovery.conf from the sample file located at /usr/share/postgresql/<postgres-version>/recovery.conf.sample

d) Edit the recovery.conf to configure the standby mode:

standby_mode = on
primary_conninfo = 'host=<primary-server-ip> port=5432 user=replicator password=<password>'

All these changes need to be made as a root user. Don’t forget to restart both servers so they can pick up the changes, and pay special attention to the network setup by ensuring that the hosts are accessible or that ports are not being blocked by a firewall, and so on. This configuration is a good starting point for exploring customizable options. If you have any issues a good place to start troubleshooting is the postgres logs of each server (located in “/var/log/postgresql/postgresql--main.log”).

Wrap-up

With the recent surge of popularity of NoSQL, some people thought that SQL databases were headed to oblivion and that PostgreSQL, not being the most used SQL database, would be one of the first ones to fall. This hasn’t been the case, and so it remains important to refine the PostgreSQL recruiting process. With the NoSQL euphoria fading away, people are realizing that NoSQL is not a silver bullet. With PostgreSQL becoming so popular, SQL databases still play an important role.

Hire PostgreSQL developers now
Alvaro 1506e7

My team is going to personally help you find the best candidate to join your team.

Alvaro Oliveira
VP of Talent Operations