What is most valuable?
For this question I will focus on our usage of PostgreSQL in the company. A great differentiator for this database, if compared with other providers, is its easy extensibility and the existence of data types that would fall in the category of NoSQL. In particular, HSTORE (key/value store) and JSON (documents). This feature makes it possible to combine the strengths of relational and non-relational artifacts. Specifically transactionality and indexing vs. hierarchical structures and flexibility.
How has it helped my organization?
The company I work for creates economic time series and forecasting’s based on monthly surveys with companies. Besides a set of general questions, different sectors of economic activity include questions specific to their sector. This means that we have different sets of answers depending on the survey. Instead of having a separate table for each set of answers, it would be nice to have a single survey data table including all answers from all surveys. The Oracle implementation that was implemented around 13 years ago stored the numerically encoded answers in a string. Along with that there were tables associated for each question in the string field name, the starting position, and the width of the answer code within the string. This system is very prone to errors and, more problematic; it is not flexible enough to respond to new requirements in a timely manner if our researcher wished to add questions in single months that are relevant for that specific period in the economic history of the country. All this was only possible at the cost of long implementation and testing times and eventually was never really done. With PostgreSQL we moved what used to be a string with fixed positions into an HSTORE (a key/value store) field. We have now named answers (the key) and their values. The HSTORE field is flexible, i.e. adding a single question in a single month simply means that only for that month there is a key pointing to the single question's answer.
What needs improvement?
v9.5, which we currently don't have in our productive systems, already has some key features that we would like to use. In particular, row level security, a feature allowing to restrict the visibility of rows based on a set of policies. A feature that is not available yet and I would welcome is more of a by-product. PostgreSQL offers very good documentation features, which we integrated in the technical documentation on our internal Wiki. Changes in the database are immediately available in the Wiki without the need of editing the Wiki page manually. It is possible, and we do it, to attach comments on objects and their components. These comments also appear then in the Wiki documentation. Unfortunately it is not possible, i.e. there is not an implementation yet, to attach comments to function parameters and return type. We make extensive use of functions as structured interface to applications. This feature would make our documentation more complete. We created a workaround for that, but still, it would be nice to have it built in the database.
For how long have I used the solution?
I use the open source database management system PostgreSQL in different situations. In the company I work for we have version 9.3.5 running on Red Hat Enterprise Linux 4.4.7-4 64 bit. The choice of operating system and database version is not a thing we can influence much. Both are hosted by the central informatics services of the company and we have what we get. We can however decide which RDBMS to use and we chose PostgreSQL. For the web services that we implement for the association Swiss PostgreSQL Users Group we use version 9.4.6 on a Debian 4.9.2-10 (Jessie) server. Finally on my local development computer I use version 9.5.2 on LinuxMint 17.3 Rosa, a Debian like and Ubuntu based operating system.
In my company, PostgreSQL was introduced to replace Oracle slightly more than three years ago. Privately, I have been using PostgreSQL for about six to seven years.
What was my experience with deployment of the solution?
There were no issues with the deployment.
What do I think about the stability of the solution?
We had no issues with the performance.
What do I think about the scalability of the solution?
We had once a problem with a script that created a huge SQL statement with about 40,000 function calls. This led to a stack overflow. Thanks to the community mailing lists we were able to find quickly the origin of the problem and the correct approach to avoid it.
How are customer service and technical support?
In this case that would map to the community support on mailing lists and IRC channels, and this type of service is very good. It is also possible, of course, to buy support from companies like Cybertec Schönig & Schönig GmbH (Austria), EDB in the US or 2ndQuadrant in Europe. I don't have direct experience with that, but I have often heard from colleagues that they are all excellent. This is quite simple to explain, because many of these companies' employees are active developers of the code base of PostgreSQL. They are also present on the many PostgreSQL mailing lists. If you are running a very critical system, and by that I mean a system, which failure could cause damages to people, I would strongly recommend that you hire at least two of these experts for a thorough audit.
Which solution did I use previously and why did I switch?
We used Sentinel which was awesome but it did not provide metric views.
How was the initial setup?
Installing a PostgreSQL cluster is straightforward. However, it is important to be aware of the architecture of the cluster, its configuration possibilities, and its authorization system. For the tuning of the configuration parameters there is no recipe, because it all depends on how the data looks like. Therefore it is necessary to understand what the individual parameters do and how they influence the overall performance. The correct usage of databases and schemas together with the authorization system, are important in order to build secure systems. It happens still too often on the world wide web that applications interacting with a database use roles with much too many privileges, creating security weaknesses. This however is not only a problem of PostgreSQL.
What about the implementation team?
We did not implement the database software. What we implement is the design of the database and its interfaces toward third party systems and in-house applications. In the world of databases the person or team dealing with how data must be stored and accessed must possess complete knowledge about the processes being involved. It is not uncommon that web developer ask for accesses, which they are not entitled to and it is important to be able to offer an alternative. The most typical is a test database instance that web developers can use as playground.
What's my experience with pricing, setup cost, and licensing?
PostgreSQL is a community product and has no owner other than the community itself. There are companies specialized in offering services and add-ons on top of PostgreSQL, but the database software itself is free, open source and licenced through a BSD and MIT derived licence of its own (https://wiki.postgresql.org/wiki/FAQ#What_is_the_license_of_PostgreSQL.3F).
What other advice do I have?
Besides the simple fact of being an open product that can be used at virtually no cost, the quality of the code base is extremely good. The development process is transparent and the documentation is, with its 3000+ pages in the pdf format for version 9.5, exhaustive and complete. The community is very active and open to suggestions.
Disclosure: I am a real user, and this review is based on my own experience and opinions.