PostgreSQL back-end for Ruby on Rails confusion

I just need to add a quick summary of what postgres back-end tool our Ruby on Rails application uses, and how we’ve configured it, because it’s quite confusing…

There are four postgresql backends:

• ruby-postgres. This version is no longer maintained. This is the version we used when the project began.
• postgres-pr. This is a pure ruby implementation, which is not interesting for us.
• postgres. This is the continuation of the unmaintained ruby-postgres. This version includes such fixes as that it can be compiled against libpg-8.3.
• ruby-pg. It is said that this one is now the official postgres back-end, but when I install it, the application still can’t find “postgres”.

Because the aforementioned article states that the pg extension is unstable, “postgres” seems to be what we should use. The article states that it is included in the ruby-pg package, but it doesn’t work when I install it, so I had to install “postgres”. I uninstalled ruby-pg, because it doesn’t seem necessary.

To continue, we once used a patched postgresql adapter, because we needed more accurate timestamps (the standard connection adapter rounded everything off to whole seconds), but if I recall correctly, this patch was only necessary on the connection adapter in Rails, not the back-end. We never commissioned the functionality that required this, so this existed only in the workdir of one of the devs.

As a final note; on our production server, we have a version of ruby-postgres installed in /usr/local. I can’t remember why…

1. Comment by halfgaar
On August 28, 2008 at 16:02

2. Comment by Rowan Rodrik
On September 2, 2008 at 15:21

O, the joy of documenting… I’m really glad we’re getting into the habit of logging more of what we encounter. Who cares if it’s of no use to the most of the rest of the world…

I’d try to answer any of those questions, if only I could remember…

3. Comment by Keith Basil
On July 10, 2009 at 20:49

How are you guys handling server replication and content synchronization with PostgreSQL?

4. Comment by halfgaar
On July 12, 2009 at 10:38

We don’t. We only have one server…

5. Comment by Rowan Rodrik
On November 28, 2009 at 20:55

Turns out we were using the manually compiled version in /usr/local. We noticed this while upgrading a very messy Debian testing to Debian Lenny. To recompile this version successfully against libpq-8.3 instead of 8.2, I had to remove the #else clause from the following bit in postgres.c

#ifndef HAVE_PG_ENCODING_TO_CHAR
#define pg_encoding_to_char(x) "SQL_ASCII"
#else
extern char* pg_encoding_to_char(int);
#endif 

I got this patch from a forum post by one of the guys who forked this code, but we got none of these other projects to work with our version of ActiveRecord (the one in Rails 1.2.6).