Similar to mySQL, postgreSQL is very famous and feature packed free and open source database.
Earlier we’ve discussed several installations including LAMP stack installation, Apache2 installation from source, PHP5 installation from source and mySQL installation.
In this article, let us review how to install postgreSQL database on Linux from source code.
Step 1: Download postgreSQL source code
From the postgreSQL download site, choose the mirror site that is located in your country.
# wget http://wwwmaster.postgresql.org/redir/198/f/source/v8.3.7/postgresql-8.3.7.tar.gz
Step 2: Install postgreSQL
# tar xvfz postgresql-8.3.7.tar.gz # cd postgresql-8.3.7 # ./configure checking for sgmlspl... no configure: creating ./config.status config.status: creating GNUmakefile config.status: creating src/Makefile.global config.status: creating src/include/pg_config.h config.status: creating src/interfaces/ecpg/include/ecpg_config.h config.status: linking ./src/backend/port/tas/dummy.s to src/backend/port/tas.s config.status: linking ./src/backend/port/dynloader/linux.c to src/backend/port/dynloader.c config.status: linking ./src/backend/port/sysv_sema.c to src/backend/port/pg_sema.c config.status: linking ./src/backend/port/sysv_shmem.c to src/backend/port/pg_shmem.c config.status: linking ./src/backend/port/dynloader/linux.h to src/include/dynloader.h config.status: linking ./src/include/port/linux.h to src/include/pg_config_os.h config.status: linking ./src/makefiles/Makefile.linux to src/Makefile.port # make make[3]: Leaving directory `/usr/save/postgresql-8.3.7/contrib/spi' rm -rf ./testtablespace mkdir ./testtablespace make[2]: Leaving directory `/usr/save/postgresql-8.3.7/src/test/regress' make[1]: Leaving directory `/usr/save/postgresql-8.3.7/src' make -C config all make[1]: Entering directory `/usr/save/postgresql-8.3.7/config' make[1]: Nothing to be done for `all'. make[1]: Leaving directory `/usr/save/postgresql-8.3.7/config' All of PostgreSQL successfully made. Ready to install. # make install make -C test/regress install make[2]: Entering directory `/usr/save/postgresql-8.3.7/src/test/regress' /bin/sh ../../../config/install-sh -c pg_regress '/usr/local/pgsql/lib/pgxs/src/test/regress/pg_regress' make[2]: Leaving directory `/usr/save/postgresql-8.3.7/src/test/regress' make[1]: Leaving directory `/usr/save/postgresql-8.3.7/src' make -C config install make[1]: Entering directory `/usr/save/postgresql-8.3.7/config' mkdir -p -- /usr/local/pgsql/lib/pgxs/config /bin/sh ../config/install-sh -c -m 755 ./install-sh '/usr/local/pgsql/lib/pgxs/config/install-sh' /bin/sh ../config/install-sh -c -m 755 ./mkinstalldirs '/usr/local/pgsql/lib/pgxs/config/mkinstalldirs' make[1]: Leaving directory `/usr/save/postgresql-8.3.7/config' PostgreSQL installation complete.
PostgreSQL ./configure options
Following are various options that can be passed to the ./configure:
- –prefix=PREFIX install architecture-independent files in PREFIX. Default installation location is /usr/local/pgsql
- –enable-integer-datetimes enable 64-bit integer date/time support
- –enable-nls[=LANGUAGES] enable Native Language Support
- –disable-shared do not build shared libraries
- –disable-rpath do not embed shared library search path in executables
- –disable-spinlocks do not use spinlocks
- –enable-debug build with debugging symbols (-g)
- –enable-profiling build with profiling enabled
- –enable-dtrace build with DTrace support
- –enable-depend turn on automatic dependency tracking
- –enable-cassert enable assertion checks (for debugging)
- –enable-thread-safety make client libraries thread-safe
- –enable-thread-safety-force force thread-safety despite thread test failure
- –disable-largefile omit support for large files
- –with-docdir=DIR install the documentation in DIR [PREFIX/doc]
- –without-docdir do not install the documentation
- –with-includes=DIRS look for additional header files in DIRS
- –with-libraries=DIRS look for additional libraries in DIRS
- –with-libs=DIRS alternative spelling of –with-libraries
- –with-pgport=PORTNUM change default port number [5432]
- –with-tcl build Tcl modules (PL/Tcl)
- –with-tclconfig=DIR tclConfig.sh is in DIR
- –with-perl build Perl modules (PL/Perl)
- –with-python build Python modules (PL/Python)
- –with-gssapi build with GSSAPI support
- –with-krb5 build with Kerberos 5 support
- –with-krb-srvnam=NAME default service principal name in Kerberos [postgres]
- –with-pam build with PAM support
- –with-ldap build with LDAP support
- –with-bonjour build with Bonjour support
- –with-openssl build with OpenSSL support
- –without-readline do not use GNU Readline nor BSD Libedit for editing
- –with-libedit-preferred prefer BSD Libedit over GNU Readline
- –with-ossp-uuid use OSSP UUID library when building contrib/uuid-ossp
- –with-libxml build with XML support
- –with-libxslt use XSLT support when building contrib/xml2
- –with-system-tzdata=DIR use system time zone data in DIR
- –without-zlib do not use Zlib
- –with-gnu-ld assume the C compiler uses GNU ld [default=no]
PostgreSQL Installation Issue1:
You may encounter the following error message while performing ./configure during postgreSQL installation.
# ./configure checking for -lreadline... no checking for -ledit... no configure: error: readline library not found If you have readline already installed, see config.log for details on the failure. It is possible the compiler isn't looking in the proper directory. Use --without-readline to disable readline support.
PostgreSQL Installation Solution1:
Install the readline-devel and libtermcap-devel to solve the above issue.
# rpm -ivh libtermcap-devel-2.0.8-46.1.i386.rpm readline-devel-5.1-1.1.i386.rpm warning: libtermcap-devel-2.0.8-46.1.i386.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] 1:libtermcap-devel ########################################### [ 50%] 2:readline-devel ########################################### [100%]
Step 3: Verify the postgreSQL directory structure
After the installation, make sure bin, doc, include, lib, man and share directories are created under the default /usr/local/pgsql directory as shown below.
# ls -l /usr/local/pgsql/ total 24 drwxr-xr-x 2 root root 4096 Apr 8 23:25 bin drwxr-xr-x 3 root root 4096 Apr 8 23:25 doc drwxr-xr-x 6 root root 4096 Apr 8 23:25 include drwxr-xr-x 3 root root 4096 Apr 8 23:25 lib drwxr-xr-x 4 root root 4096 Apr 8 23:25 man drwxr-xr-x 5 root root 4096 Apr 8 23:25 share
Step 4: Create postgreSQL user account
# adduser postgres # passwd postgres Changing password for user postgres. New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully.
Step 5: Create postgreSQL data directory
Create the postgres data directory and make postgres user as the owner.
# mkdir /usr/local/pgsql/data # chown postgres:postgres /usr/local/pgsql/data # ls -ld /usr/local/pgsql/data drwxr-xr-x 2 postgres postgres 4096 Apr 8 23:26 /usr/local/pgsql/data
Step 6: Initialize postgreSQL data directory
Before you can start creating any postgreSQL database, the empty data directory created in the above step should be initialized using the initdb command as shown below.
# su - postgres # /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data/ The files belonging to this database system will be owned by user postgres This user must also own the server process. The database cluster will be initialized with locale en_US.UTF-8. The default database encoding has accordingly been set to UTF8. The default text search configuration will be set to "english". fixing permissions on existing directory /usr/local/pgsql/data ... ok creating subdirectories ... ok selecting default max_connections ... 100 selecting default shared_buffers/max_fsm_pages ... 32MB/204800 creating configuration files ... ok creating template1 database in /usr/local/pgsql/data/base/1 ... ok initializing pg_authid ... ok initializing dependencies ... ok creating system views ... ok loading system objects' descriptions ... ok creating conversions ... ok creating dictionaries ... ok setting privileges on built-in objects ... ok creating information schema ... ok vacuuming database template1 ... ok copying template1 to template0 ... ok copying template1 to postgres ... ok WARNING: enabling "trust" authentication for local connections You can change this by editing pg_hba.conf or using the -A option the next time you run initdb. Success. You can now start the database server using: /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data or /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
Step 7: Validate the postgreSQL data directory
Make sure all postgres DB configuration files (For example, postgresql.conf) are created under the data directory as shown below.
$ ls -l /usr/local/pgsql/data total 64 drwx------ 5 postgres postgres 4096 Apr 8 23:29 base drwx------ 2 postgres postgres 4096 Apr 8 23:29 global drwx------ 2 postgres postgres 4096 Apr 8 23:29 pg_clog -rw------- 1 postgres postgres 3429 Apr 8 23:29 pg_hba.conf -rw------- 1 postgres postgres 1460 Apr 8 23:29 pg_ident.conf drwx------ 4 postgres postgres 4096 Apr 8 23:29 pg_multixact drwx------ 2 postgres postgres 4096 Apr 8 23:29 pg_subtrans drwx------ 2 postgres postgres 4096 Apr 8 23:29 pg_tblspc drwx------ 2 postgres postgres 4096 Apr 8 23:29 pg_twophase -rw------- 1 postgres postgres 4 Apr 8 23:29 PG_VERSION drwx------ 3 postgres postgres 4096 Apr 8 23:29 pg_xlog -rw------- 1 postgres postgres 16592 Apr 8 23:29 postgresql.conf
Step 8: Start postgreSQL database
Use the postgres postmaster command to start the postgreSQL server in the background as shown below.
$ /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data >logfile 2>&1 & [1] 2222 $ cat logfile LOG: database system was shut down at 2009-04-08 23:29:50 PDT LOG: autovacuum launcher started LOG: database system is ready to accept connections
Step 9: Create postgreSQL DB and test the installation
Create a test database and connect to it to make sure the installation was successful as shown below. Once you start using the database, take backups frequently as mentioned in how to backup and restore PostgreSQL article.
$ /usr/local/pgsql/bin/createdb test $ /usr/local/pgsql/bin/psql test Welcome to psql 8.3.7, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help with psql commands \g or terminate with semicolon to execute query \q to quit test=#
Comments on this entry are closed.
Hello
Thank you very much for the easy to follow build/install/run instructions. They’ve served me just great today 🙂
thanx s
hai…
Thank you very much
hi
iam using fedora8
in default postgres is 8.3 iam install the source 8.3.7 in place of that
i did all the commands according from INSTALL and README
the commands are
./configure
gmake
su
gmake install
adduser postgres
mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
su – postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
/usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data >logfile 2>&1 &
/usr/local/pgsql/bin/createdb test
/usr/local/pgsql/bin/psql test
how to restart the postgresql service
pls tel me any one
@Robert Schultz, Siva,
Thanks for your comment. I’m glad you found this guide helpful.
@Raju,
Refer to our PostgreSQL DBA Commands article that explain how to setup postgreSQL service and restart it.
This easy rundown served me better than the official documentation on postgresql.org–at least for getting a testbed up and running quickly. Thank you.
thanks a lot,i am new to postgres and it helped me a lots,
thanks,thanks,thanks,thanks,thanks,thanks,thanks,thanks,thanks,thanks,
thanks a lot!!!!!
For Ubuntu 9.04 through 10.10 I had to sudo apt-get install readline6-dev.
hi how to enable uuid in postgres8.4.6
hi
I have installed postgres version “postgresql-8.3.7” on RHLE 5.2. but all the command not working properly like
pg_restore
service postgresql start|stop|status|restart
so I want to uninstall the the postgresql, please tel me the steps.
Hi,
Thank you very much for this post.
I download “postgresql-9.0.4” and cross-compile for my embedded board.
Every things works fine till Step 8.
When I try to start my postgreSQL database its gives me following error:
“FATAL: could not write lock file “/tmp/.s.PGSQL.5432.lock”: No space left on device”
The output of df -h is
$df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 3.6G 650.4M 2.8G 18% /
tmpfs 424.0M 40.0K 424.0M 0% /dev
shm 424.0M 0 424.0M 0% /dev/shm
rwfs 512.0K 512.0K 0 100% /mnt/rwfs
rwfs 512.0K 512.0K 0 100% /tmp
rwfs 512.0K 512.0K 0 100% /var
It shows that ‘/tmp’ is full, but ‘/’ is 2.8G free.
I install all the FS on 4GB SD card.
Please help me to solve this problem.
Thanks in advance.
How to remove( completely ) postgresql, if I have installed and configured the PostgreSQL server according to your post above ?
nice tutorial
Thanks, very nice tutorial. For Linux Mint 12 (so probably Ubuntu 11.10 also) I also had to sudo apt-get install readline6-dev as mentioned above for older versions.
I have installed postgres 9.0.7 on my linux server and I can run the regression tests against the installed instance locally on my server. Next, I want to run this regression test against a remote machine which has my DB and app installed. Can someone tell me how I can run the regression test, where I have to make changes in configuration to run the test suite against remote host?
Excellent post — clear, relavent, and concise. Extremely useful.
Excellent post
I can’t execute certain commands because I’m not getting authenticated as a root user…What should i do then?
Too Good Man
Hi i have tried to install postgresql 9.2.4 from source tar.gz , after ./configure while im trying to make it as for gmake even after gmake installed its shows some error such as refer to INSTALL Document .. is there any other steps want to follow , is it differ from this posting steps ?
Thank you for posting this. Saved me a lot of time. Worked perfectly.
configure: error: readline library not found
If you have readline already installed, see config.log for details on the
failure. It is possible the compiler isn’t looking in the proper directory.
Use –without-readline to disable readline support.
How to Fix ..
@Babn
Try:
sudo apt-get install libreadline-dev
You ROCK ! Thanks
hey i am trying to install postgres into my xubuntu and am etting the following error how do i correct it?
The following packages have unmet dependencies:
postgresql-9.3 : Depends: postgresql-client-9.3 but it is not going to be installed
Depends: postgresql-common (>= 142~) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
Hi I getting error like ” No acceptable C Compiler found in $PATH ” how to solve this Please help me
Also, the source comes with a startup script that can be installed by
running:
# cp contrib/start-scripts/linux /etc/init.d/postgresql
# update-rc.d postgresql defaults
(update-rc.d is to debian-based systems what chkconfig is to
Redhat-based systems).
Thank you so much! After constantly getting
FATAL: role “postgres” does not exist
this is the first instruction I found that works.
Hi This is karthik
Getting error while installing postgres 8.3.7 on linux 5.Please help
-bash-3.2$ make install
make -C doc install
make[1]: Entering directory `/mnt/hgfs/postgres/postgresql-8.3.7/doc’
mkdir -p — /usr/local/pgsql/doc/html
mkdir: cannot create directory `/usr/local/pgsql’: Permission denied
make[1]: *** [installdirs] Error 1
make[1]: Leaving directory `/mnt/hgfs/postgres/postgresql-8.3.7/doc’
make: *** [install] Error 2
Just what I need, thank you for the clear and concise information.
How about making the rpm from the source code?