Zarówno przyczyna problemu, jak i łatwe rozwiązanie stały się oczywiste, gdy uruchomiłem bin/pg_config w wierszu poleceń.
pg_config generuje zmienne używane do sterowania kompilacją i łączeniem. Szczególnie interesujące są LIBDIR i LDFLAGS. LIBDIR określa lokalizację bibliotek statycznych, podczas gdy LDFLAGS zapewnia lokalizacje wyszukiwania bibliotek dynamicznych. W moim systemie LIBDIR został poprawnie ustawiony na /LibraryPostgreSQL/9.3/lib , ale LDFLAGS został ustawiony w następujący sposób:
LDFLAGS = -L../../../src/common -L/usr/local/lib -L/opt/local/20140109/lib -Wl,-dead-strip-dylibs
Od libpq.5.dylib nie był obecny w żadnej z tych lokalizacji, klejnot nie znalazł go, a zamiast tego znalazł starszą wersję, która akurat była zainstalowana w /usr/lib .
Jednym ze sposobów naprawienia tego byłoby wstrzyknięcie poprawnej lokalizacji pliku do LDFLAGS, prawdopodobnie poprzez modyfikację kodu w extconf.rb który generuje plik konfiguracyjny. Jednak o wiele łatwiejszym rozwiązaniem w tym przypadku jest dodanie dowiązania symbolicznego w /usr/local/lib do właściwej lokalizacji pliku:
/usr/local/lib> ln -s /Library/PostgreSQL/9.3/lib/libpq.5.dylib libpq.5.dylib
Jeśli napotkasz podobny problem, po prostu sprawdź dane wyjściowe pg_config i sprawdź, czy możesz umieścić dowiązanie symboliczne do właściwej lokalizacji pliku w jednym z katalogów, które są już określone przez LDFLAGS.