Hello all

In earlier threads on the Hackers mailing list there were discussions of a few things that I would like to comment on.  Sorry in advance for the length of this post.

First, PostgreSQL needs 2PC AND eager replication AND lazy replication all at the same time.  Of those however, I think Postgres would get the most bang for the buck by supporting 2PC and eager (postgres-r) asap. Add lazy replication when you can later.  (Besides 2PC, and postgres-r seem to be closer to completion and integration with the main postgres development tree)

Also, 2PC and eager replication should work together simultaneously. Why?....

I may want performance and reliability provided by eager replication, but I also need to update the database and perform some operations on a pair of queues as a single transaction.  In order for this to be possible we need both replication and 2PC, and they have to work together!  In this situation 2PC and replication have to be developed with knowledge of each other.  Lazy replication could be added to this situation later without to much effect. 

Another thing I noted is that people are asking for 2PC with the JDBC driver.  Obviously that can only happen when the database supports the feature.  However, from what I last saw on the JDBC list archives it doesn't appear as if the JDBC driver developers know you guys are changing the FE/BE protocol and may soon be adding 2PC.  I think the JDBC developers should be made aware of this asap...  If all of a sudden the JDBC driver doesn't work with the newest version of Postgres there is going to be some upset people! You should also ask the JDBC driver developers to take part in the discussions of the new FE/BE protocol (if they aren't already).  2PC / XA resources in the JDBC driver will provide a very large boon to Postgres in the Java / J2EE arena.

Second, PostgreSQL needs to run as a production grade system on Windows if you want to increase "mind share".  Why?....

Postgres is great, and free ($) but if you can only run a "production" system on UN*X there is a cost as far as a windows developer is concerned.  That cost is the time and effort required to learn some flavor of UN*X in order to deploy the database.  That is a very significant investment in time ($) to learn and money ($) for books. (Yes you can learn everything you need online for free, but who is going to do that... People buy books.)

When you get a production quality Postgres on Windows you will be immediately increasing the potential user base for Postgres and that will have a very large effect on the "mind share" postgres has.  I would bet one of the reasons MySQL is so popular is because a Windows developer can just install a binary and use it on their systems.

Also a very important point everyone seemed to miss in regards to MySQL is that you CAN use it in a "commercial" environment as long as you are not distributing your product.  I.E. if you create an app only to be used by your company internally, then the company doesn't need to buy a MySQL license.  Also, if the company downloads some open source software, and downloads MySQL, and deploys them both for internal use it is not required to purchase a license for MySQL.

Why do I KNOW all this?  Because I am a Windows user / Java developer, who has been spending a lot of time ($) and money on books ($) to learn Linux (Because it is awesome!)...  I also spent a lot of time going over MySQL, Postgres, Firebird, SAPDB and even the old Sybase version that was released for Linux.  Ive also worked (at work) with Oracle, DB2, MS-SQL.

Postgres should not and is not competing with MySQL, and that should not be your focus.  Postgres is competing with Oracle, MS-SQL, DB2, Sybase, Firebird, etc.  Why?...  

For a few reasons:

1) Some MySQL users have a near religious affiliation with MySQL.  You will never convert these people. Don't even try.

2) Some MySQL users are Windows users who would use any open source database they can, as long as they can run it on Windows in a "production" setting.  For these users Postgres is not an option for the moment.  When Postgres Win32 is available (and production grade) I think many of these users will begin investigating it.  Until recently the only option for an open source DB on Windows was MySQL.  (Now you have Firebird, SAPDB, and probably others).  So yes in some aspect you are competing with MySQL here...  But why compete, just make the best product you can and let the user decide which one they want to use.

3) Some MySQL users only need what MySQL provides.  There is no incentive for these users to switch; the system they know does what they need.

Don't try to compete with MySQL it's a waste of time.

DO compete with Oracle, etc..

1) Postgres is a contender in many significant areas to the commercial DB's.  When postgres has replication and 2PC this will definitely increase the threat that Postgres is to the commercial DB market.

2) Users who need triggers, stored procedures, etc. cannot consider MySQL.. it doesn't support those features (at the moment).  They can look at Postgres, SAPDB, Firebird, and the commercial DB's.  To compete Postgres has to be better than these other options.

What makes Postgres the better solution in this arena?  

	a) price - although remember the related costs I mentioned above.  Also firebird and SAPDB are free and run on Windows, so they may have a "lower price" for Windows developers for the moment.  Postgres Win32 will help us in this area.

	b) reliability - no, all the DB's are fairly reliable. (lets not waste time discussing this one ok folks)

	c) XA resources in Java, 2PC.. No, we don't have it yet.. We need it.  I think the firebird JDBC driver has this already.  This sounds like its coming in 7.4.

	d) Replication - no, we don't have it yet.. We need it.  Sounds like master slave is coming in 7.4.  We need to get multi-master soon.  You can already do multi-master replication in MySQL.  (Yes we all know that what they have for replication is not as robust, especially if you use it in multi-master (circular replication a->b->c->a) but at least they have something.  Lets not waste our time discussing what they have..  Lets instead spend that time building an even better solution for Postgres.)

	e) cross-db queries - no, we don't have it yet.. We need it. (extend postgres views capability, dblink and use 2pc?  See earlier post).

	f) stored procedures that return result sets (tuples).  Postgres finally got that in 7.3.

	g) insert your needed feature here

	If Postgres had 2pc, and Replication that would definitely move it closer to killing the commercial db's.  2pc is a building block to getting cross-db queries (across servers).

So, from the above RIGHT NOW Postgres is NOT a better solution than the commercial DBs except in the area of price And that is true only for people already familiar with UN*X.  Dont get me wrong here folks I love Postgres..  Its just time for us to take a step back and look at the facts, and the facts are Postgres needs even more to be truly competitive where it should be competing. (Not competing with MySQL.)  I think many of the features Postgres needs to be a better competitor are coming in the 7.4 release.

Other things that can / need to be done to increase Postgres mind share.

a)	Embrace the Java community.  The Java community has very good and close ties to the open source community.  This is obvious because of the numerous open source projects in and for java.  Jakarta.apache.org and all the frameworks on it like log4j, Struts, etc.  Free open source J2EE app servers like Jboss, Jonas, etc..  However, the JDBC driver for Postgres is HARD TO FIND!  Its hard to find because someone new to postgres cant find anything about it on the Postgresql.org home page.  There is no link to it, and no mention of it.  Granted the JDBC driver can be found by searching google, and by looking in the interfaces folder of the download.  But a new Java visitor may not search google, and probably wont bother to download Postgres if they dont think it supports JDBC.  Also, Postgres supports many different languages for use in functions and stored procedures, but it doesnt support Java.  Many commercial DBs do.  Maybe Postgres should consider adding support for Java in this area?  (I dont think this is overly important, its just something else that could be done.)

b)	The Postgres group has done a lot to improve the homepage of Postgresql.org.  But when you click on most links it takes you to another site with a completely different look and feel.  The side effect of this is that the Postgres project looks as if it is un-organized.  Even more needs to be done in this area.  The postgres site should be more cohesive with a single look and feel for as much of the site and its links as possible.  Look at apache.org.  They have MANY projects going on, but have a singular (or at least very similar) look and feel across most of their projects.  You want a real shocker  Visit the gborg homepage (click the gborg link on the bottom left corner of the postgres site).  Then read the news on the right side of the gborg homepage.  See that url for http://www.greatbridge.org/ in the GreatBridge.Org Version 2.0.0 Release story from way back in 2001!  Go ahead, visit that URL.  Whats the first thing you see on that page?  Purchase IBM DB2 At IBM.com.  Come on!  Not even a mention of Postgres, and this is right on the gborg homepage!  The firebird, sapdb and mysql sites are killing postgres here.  The postgres homepage and related links is the first thing someone new to postgres sees!  There shouldnt be news on any of the main pages from back in 2001.  It looks like nothing is going on with Postgres.  There has got to be more recent news that can be put up.  Also, going back to the Java thing, the link for PostgreSQL JDBC 2.0 API compliance on the JDBC homepage goes to a dead link and has been that way for weeks.  What does this tell a new person looking to use Postgres from Java?

I could keep going here, but this message is long enough already 

Basically my points are:

1) Postgres IS GREAT, but for the moment the real competition (Commercial DBs) are providing more features.  We need to catch up in some areas, and provide things they cant in others (easy / free / safe / multi-master eager replication)

2) We shouldnt be competing with MySQL.

3) Postgres may be great, but the perception given by collection of sites for postgres is that the project is un-organized.  All the other open source DBs have a better look / feel / organization in this area.

Later
Rob


Wed, 16 Apr 2003 11:33:25 -0400
Rob Butler <robert.butler5@verizon.net>
Many comments (related to "Are we losing momentum?") 