psycopg2cffi (Updated 2015)
psycopg2cffi is yet another psycopg2-compatible replacement and should provide the best PostgreSQL performance with PyPy. Add this to your settings.py
to remain compatible with both:
try:
import psycopg2
except ImportError:
# Fall back to psycopg2cffi
from psycopg2cffi import compat
compat.register()
psycopg2-ctypes (2012)
I also know that some people are using psycopg2-ctypes.
This is the easiest way; to stay compatible with both, just add this code in your Django settings.py
:
try:
import psycopg2
except ImportError:
# Fall back to psycopg2-ctypes
from psycopg2ct import compat
compat.register()
I tested this a few releases ago; sadly in my experience, psycopg2-ctypes negates the small performance gains afforded by PyPy. But YMMV, it depends on how JIT-friendly your code is in general and what fraction of time you actually spend running Python code. And maybe PyPy has just improved since then.
and I don't think psycopg2-ctypes is ready for Windows yet
I haven't tried this, but ctypes is platform-independent. AFAICT you just have to make sure that the libpq.dll
library is loadable (located in a directory in your PATH environment variable or local directory) and it should work on Windows just like in Linux.
pypy-postgresql
I do see that Alex Gaynor has made a fork of PyPy called pypy-postgresql.
I don't think this is a good choice in the long term. The branch hasn't been updated for more than a year and my attempts to build it have failed. And it seems wrong to hard-code a PostgreSQL driver in the interpreter anyway.
I believe there are no binaries out there of pypy-postgresql either, so if you want to use it, you'd need to build the whole PyPy branch yourself. Not for the faint of heart: it takes tens of minutes and a machine with at least 4 GB of memory. (Official instructions: http://pypy.org/download.html#building-from-source)
To build, you first need the source. If you have Mercurial installed, you can simply hg clone https://bitbucket.org/alex_gaynor/pypy-postgresql
. If not, you can download the automagic "tip" zip file: https://bitbucket.org/alex_gaynor/pypy-postgresql/get/tip.zip
Open a command line, go into the decompressed directory, and then inside pypy/translator/goal
If you have PyPy installed, it's recommended to use that for building:
pypy translate.py -Ojit
Otherwise:
python translate.py -Ojit
Sadly this is where my knowledge ends. I get the error "BytecodeCorruption: unimplemented opcode, ofs=234, code=203, name=BUILD_LIST_FROM_ARG
"