Last week I discussed various reasons why you would want to compile your open-source database from the project’s source code. I wanted to give an example here of the process for compiling a particular database, PostgreSQL. Version 9.1 of PostgreSQL was released on 2011-09-11, so the example below works with that code base.
I’m assuming in the following instructions that you’re starting with a sparkling, new Fedora installation. In other words, you haven’t installed any of the dependencies (e.g., gcc, make, bison) that you’ll need for building the PostgreSQL source code. I used Fedora 15, 64-bit.
To grab the most up-to-date Postgres code, you’ll want to check it out from the git repository. If git is not installed on your system, install it.
There are a number of libraries and software programs that you’ll need if you’re going to build PostgresSQL. The easiest way to get all of them is to use the yum-builddep command. (This will also install flex, bison, and Perl, if they are not already present on your system).
$ sudo yum-builddep postgresql
Among other software and libraries, yum should offer to install bison, flex, and tcl. However, yum-builddep for postgresql does not install the gcc compiler, which you will also need. To get gcc installed, run the command:
Check out the Source Code using Git
Grabbing the code via git is a very simple one-line command.
$ git clone git://git.postgresql.org/git/postgresql.git
This checks the source code out into a sub-directory of your current location, called postgresql.
Configure the Build
A full list of the configuration options available at the command line is described in the “PostgreSQL 9.1.0 Documentation
“. For this example, I ran a fairly vanilla configuration, but added features for SQL/XML in the database.
$ cd postgresql
$ ./configure --with-libxml --with-libxslt
Make and Install
Now that you’ve fine-tuned exactly how you want Postgres built, you’ll run the fairly standard make and install steps.
Note that you must run the install step as a privileged user, since access to the /usr/local directory (it’s there, at /usr/local/pgsql/bin, that the binary files will live) is restricted by default.
Post-Installation and Database Configuration
You’ll want to run PostgreSQL as a specific, non-root user, postgres. So, create this user.
$ sudo adduser postgres
$ sudo passwd postgres
Now, change user to the newborn postgres user to run the database initialization.
$ su - postgres
First, set the environment variables for locating needed libraries and executables.
$ LD_LIBRARY_PATH=/usr/local/pgsql/lib; export LD_LIBRARY_PATH
$ PATH=$PATH:/usr/local/pgsql/bin; export PATH
Now, create a directory to contain the server’s data files.
Run the initdb command to initialize the PostgreSQL server.
$ initdb -D
I recommend creating a specific directory for the server log files.
Starting the Server
Start the server as the postgres user, indicating the location of data files and the location of the server log files.
$ postgres -D >/server.log 2>&1 &
There shouldn’t be any errors that prevent the server from starting, but if you inspect the log file you should see the following messages.
LOG: database system is ready to accept connections
LOG: autovacuum launcher started
Your server should be up and running, ready to accept your client connections!