PostgreSQL client programs
Go to file
2004-09-09 10:43:06 +00:00
.cvsignore auto-import postgresql-7.3.4-1.rhl9 from postgresql-7.3.4-1.rhl9.src.rpm 2004-09-09 10:42:45 +00:00
filter-requires-perl-Pg.sh auto-import postgresql-7.3.2-3 from postgresql-7.3.2-3.src.rpm 2004-09-09 10:41:55 +00:00
Makefile Setup of module postgresql 2004-09-09 10:35:35 +00:00
postgresql-bashprofile auto-import postgresql-7.2-2.7 from postgresql-7.2-2.7.src.rpm 2004-09-09 10:39:06 +00:00
postgresql.init auto-import postgresql-7.3.4-1.rhl9 from postgresql-7.3.4-1.rhl9.src.rpm 2004-09-09 10:42:45 +00:00
postgresql.spec auto-import postgresql-7.3.4-2 from postgresql-7.3.4-2.src.rpm 2004-09-09 10:43:06 +00:00
README.rpm-dist auto-import postgresql-7.3.2-3 from postgresql-7.3.2-3.src.rpm 2004-09-09 10:41:55 +00:00
sources auto-import postgresql-7.3.4-1.rhl9 from postgresql-7.3.4-1.rhl9.src.rpm 2004-09-09 10:42:45 +00:00

README.rpm-dist
-----------------------------------------------------------------------------
Version 5.0, for the PostgreSQL 7.3-1PGDG RPMset.
Lamar Owen <lamar.owen@wgcr.org> 
-----------------------------------------------------------------------------

Contents:
 0.)	Quick -i note.
 1.)	Introduction, QuickStart, and credits
 2.)	PostgreSQL RPM packages and rationale
 3.)	Starting multiple postmasters
 4.)	Regression Testing
 5.)	Starting postmaster automatically on startup
 6.)	Grand Unified Configuration(GUC) File.
 7.)	Rebuilding the source RPM.
 8.)	Contrib files.
 9.)	Logging set up
10.)	Further Information Resource

QUICK '-i' NOTE
-----------------------------------------------------------------------------
The postmaster '-i' option is NOT used by default in the initscript shipped
with these RPMs.  Please do NOT modify the initscript to add the '-i' back
in -- it will get overwritten on the next package upgrade.  Rather, see the
section below on the Grand Unified Configuration file, which includes the
recommended way to get '-i' functionality back.

INTRODUCTION
-----------------------------------------------------------------------------
This document exists to explain the layout of the RPM's for PostgreSQL,to 
describe various RPM specifics, and to document special features found
in the RPMset.

This document is written to be applicable to version 7.3 of PostgreSQL, 
which is the current version of the RPM's as of this writing. More to the 
point, versions prior to 7.3 are not documented here.

Official PostgreSQL Global Development Group RPM's have from version 7.1.2
on carried a 'PGDG' after the release number.  Other RPMset's as distributed
with Linux distributions may have a different release number and initials.

It is preferable for the distribution-specific set to be the one used, as
the PGDG set is intentionally generic.  So, if your distro has a set of RPMs,
use them in preference.  If you want to stay up-to-date on the PostgreSQL
core itself, use the PGDG generic set -- but understand that it is a 
GENERIC set.

These RPMs are designed to be LSB-compliant -- if you find this not to be the
case, please let me know by way of the pgsql-ports@postgresql.org mailing
list.

These RPMs no longer support any sort of upgrading process other than that
documented in the regular documentation.  That is, you must dump, upgrade,
initdb, and restore your data.  The 7.2 to 7.3 migration can be quite
difficult, even to the point of requiring hand-editing of the dumpfile.

Thus, the 7.3 postgresql-server RPM specifically conflicts with prior
versions.  The old server subpackage must be removed first, the new package
installed, and the data restored from dump.

A new section on running multiple postmasters has replaced the old upgrade
instructions.

QUICKSTART
-----------------------------------------------------------------------------
For a fresh installation on a recent Red Hat or similar system, a simple
service postgresql start
as root will prepare a new database (initdb), and start a postmaster that
will listen on Unix socket 5432 only.  Edit /var/lib/pgsql/data/postgresql.conf
to enable TCP/IP -- see the section on '-i.'

The file /var/lib/pgsql/.bash_profile is now packaged to help with the 
setting of environment variables. You may edit this file, and it won't be
overwritten during an upgrade.  However, enhancements and bugfixes may be added
to this file, so be sure to check .bash_profile.rpmnew after upgrading.

The user 'postgres' is created during installation of the server subpackage.
This user by default is UID and GID 26. The user has the default shell set to
bash, and the home directory set to /var/lib/pgsql.  This user also has no
default password -- in order to be able to su to from a non-root account
or login as 'postgres' you will need to set a password using passwd.

CREDITS
-----------------------------------------------------------------------------
Thomas Lockhart
Uncle George
Ryan Kirkpatrick
Trond Eivind Glomsrd
Mark Knox
Mike Mascari
Nicolas Huillard
Karl DeBisschop
Roger Luethi
Jeff Johnson
Reinhard Max
Peter Eisentraut
Joe Conway

POSTGRESQL RPM PACKAGES AND RATIONALE.
-----------------------------------------------------------------------------
The RPMset is packaged in the following subpackages:

postgresql:		Some clients and libraries, and documentation
postgresql-server:	Server executables and data files
postgresql-devel:	Client-side development libraries
postgresql-tcl:		TCL/TK client libraries and docs
postgresql-python:	The PygreSQL client library
postgresql-jdbc:	JAR of the JDBC client
postgresql-test:	The regression tests and associated files.
postgresql-tcl:		Tcl client and PL ONLY.
postgresql-libs:	client shared libraries.
postgresql-docs:	extra documentation,such as the SGML doc sources.
postgresql-contrib:	The contrib source tree, as well as selected binaries.
postgresql-pl:		PL/Perl (if possible on this dist), PL/Python, and PL/Tcl

Note that there is no postgresql-perl, postgresql-odbc, postgresql-tk, or
postgresql-plperl package any longer.  This is due to these portions being
removed from the PostgreSQL source tarball.  The TK client package 'pgaccess'
was the core of the -tk subpackage -- so the pgtksh client was rolled back
into the -tcl package.

PostgreSQL is split up into multiple packages so that users can 'pick and
choose' what pieces are needed, and what dependencies are required.

RPM FILE LOCATIONS.
-----------------------------------------------------------------------------
In compliance with the Linux FHS, the PostgreSQL RPM's install files in a manner
not consistent with most of the PostgreSQL documentation.  According to the
standard PostgreSQL documentation, PostgreSQL is installed under the directory
/usr/local/pgsql, with executables, source, and data existing in various 
subdirectories.

Different distributions have different ideas of some of these file locations.
In particular, the documentation directory can be /usr/doc, /usr/doc/packages,
/usr/share/doc, /usr/share/doc/packages, or some other similar path.  The
RedHat 7 locations are listed below. On SuSE <7.1, substitute 'postgres' for 
'postgresql' below, and 'pg_tk' for 'postgresql-tk' below.

However, the RPM's install the files like this:
Executables:		/usr/bin
Libaries:		/usr/lib
Documentation:		/usr/share/doc/postgresql-x.y.z
Contrib:		/usr/share/doc/postgresql-x.y.z/contrib
Source:			not installed
Data:			/var/lib/pgsql/data
Backup area:		/var/lib/pgsql/backup
Templates:		/usr/share/pgsql
Procedural Languages:	/usr/lib/pgsql
Development Headers:	/usr/include/pgsql
Other shared data:	/usr/share/pgsql
Regression tests:	/usr/lib/pgsql/test/regress  (in the -test package)
Documentation SGML:	/usr/share/doc/postgresql-docs-x.y.z

The above list references the Red Hat 7.x structure.  These locations may 
change for other distributions.  Use of 'rpm -ql' for each package is
recommended as the 'Official' location source.

While it may seem gratuitous to place these files in different locations, the
FHS requires it -- distributions should not ever touch /usr/local.  It may
also seem like more work to keep track of where everything is -- but, that's
the beauty of RPM -- you don't have to keep track of the files, RPM does it
for you.

These RPM's are meant to be LSB-compliant.  If you find errors in them that
cause thembe be non-compliant, please let me know.

MULTIPLE POSTMASTERS
-------------------------------------------------------------------------------
The postgresql-server RPM contains an 'initscript' that is used to start the
postmaster.  The current version of this script has logic to be able to start
multiple postmasters, with different data areas, listening on different ports,
etc.  To use this functionality requires root access.

As an example, let us create a secondary postmaster called, creatively enough,
'secondary'.  Here are the steps:
1.)	create a hard link in /etc/rc.d/init.d (or equivalent location)
	to postgresql named 'secondary' : ln postgresql secondary   Pick
	a name not already used in /etc/rc.d/init.d!
2.)	create a file in /etc/sysconfig/pgsql named secondary.  This file is
	a shell script -- typically you would define PGDATA, PGPORT, and PGOPTS
	here.  Since $PGDATA/postgresql.conf will override many of these
	settings, except PGDATA, you might be surprised on startup.
3.)	create the target PGDATA.
4.)	Initdb the targe PGDATA as documented in the main documentation.  
	Automatic initdb may or may not work for you, so a manual one is
	preferred.  This must be done as user 'postgres'
5.)	Edit postgresql.conf to change the port, address, tcpip settings, etc.
6.)	Start the postmaster with 'service secondary start'.

Note that there may be problems with the standard symlink -- consider this
support experimental at this point in time.

REGRESSION TESTING
-------------------------------------------------------------------------------
One of the features of the newer RPM sets is the capability to perform the 
regression tests.  These tests stress your database installation and produce
results that give you assurances that the installation is complete, and that
your database machine is up to the task.

To run the regression tests under the RPM installation, make sure that
postmaster has been started (if not, su to root and execute the
'/etc/rc.d/init.d/postgresql start' init script), cd to
/usr/lib/pgsql/test/regress, su to postgres, and execute the command line:
time ./pg_regress.sh --schedule=parallel_schedule
This command line will start the regression tests and will both show the
results to the screen and store the results in the file regress.out.
It will also give you a crude benchmark of how fast your machine performs.

If tests fail, please see the file regression.diffs in that directory.  If
you need help interpreting that file, contact the pgsql-ports list on
postgresql.org.

There are some tests that will almost always fail with RedHat Linux 5.x and 6.x
installations.  The geometry, float8, and on occassion the random test will 
fail.  These failures are normal for RedHat 5.2 and 6.1.  For RedHat 6.1 with
certain i18n settings, there will be other tests fail.

For 7.1RC1, all 76 tests passed on RedHat 6.2 and RedHat 7.0. This
was accomplished by fiddling with the locale settings.  In version 7.1.2 this
capability was removed -- you need to set your locale to 'C' before executing
the first postmaster startup, or many more regression tests will fail.

For interpretation of the regression tests, see the PostgreSQL documentation.

STARTING POSTMASTER AUTOMATICALLY AT SYSTEM STARTUP
-------------------------------------------------------------------------------
RedHat Linux uses the System V Init package.  A startup script for PostgreSQL
is provided in the server package, as /etc/rc.d/init.d/postgresql.  To start
the postmaster, with sanity checking, as root, run
service postgresql start
to shut postmaster down,
service postgresql stop
There are other parameters to this script -- execute 'service postgresql' for a
listing.

To get this script to run at system startup or any time the system switches into
runlevels 3, 4, or 5, run:
chkconfig --add postgresql
chkconfig --level 345 postgresql on
and the proper symlinks will be created.  Check the chkconfig man page for more
information.  Note that this is manual -- while the startup script can include
tags to allow chkconfig to automatically perform the symlinking, this is not
done at this time.

SuSE has maintained their own RPMset for some time -- their documentation
supercedes any found in this file.

GRAND UNIFIED CONFIGURATION (GUC) FILE
-------------------------------------------------------------------------------
The PostgreSQL server has many tunable parameters -- the file 
/var/lib/pgsql/data/postgresql.conf is the master configuration file for the
whole system.  

The RPM ships with the default file -- you will need to tune the
parameters for your installation.  In particular, you might want to allow
TCP/IP socket connections -- in order to allow these, you will need to edit
the postgresql.conf file.  The line in question contains the string 
'tcpip_socket' --want to both uncomment the line and set the parameter to true
in order to get the TCP/IP socket to open.  

This is the same behavior the -i command line switch provides.  It is 
preferable to use the postgresql.conf file, however, as future versions
of the RPMset will allow multiple postmaster instances -- and that will only
be possible thanks to the decoupling of settings out to each datadir.

REBUILDING FROM SOURCE RPM
-------------------------------------------------------------------------------
If your distribution is not supported by the binary RPM's from PostgreSQL.org, 
you will need to rebuild from the source RPM.  Download the .src.rpm for this
release.  You will need to be root to rebuild, unless you have already set up
a non-root build environment.

Install the source RPM with rpm -i, then CD to the rpm building area (on RedHat
this is /usr/src/redhat by default).  You will have to have a full development
environment to rebuild the full RPM set.

This release of the RPMset includes the ability to conditionally build 
sets of packages.  The parameters, their defaults, and the meanings are:

build6x		undef	#don't build for Red Hat 6.x.  Define it to cause
			# other options to be tailored to 6.x.
beta		0	#build with cassert and do not strip the binaries
perl		1	#build the postgresql-perl package.
tcl		1	#build the postgresql-tcl package.
tkpkg		1	#build the postgresql-tk package.  
jdbc		1	#build the postgresql-jdbc package.
pls		1	#build the postgresql-pl package.
test		1	#build the postgresql-test package.
python		1	#build the postgresql-python package.
pltcl		1	#build the pltcl portion of the postgresql-pl package.
plperl		1	#build the plperl portion of the postgresql-pl package.
ssl		1	#use OpenSSL support.
kerberos	1	#use Kerberos 5 support.
nls		1	#build with national language support.
pam		1	#build with PAM support.

To use these defines, invoke a rebuild like this:
rpm --rebuild --define 'perl 0' --define 'tcl 0' --define 'tkpkg 0'\
	--define 'test 0' --define 'newintarray 1' --define 'kerberos 0' \
	postgresql-7.1.3-1PGDG.src.rpm
This line would disable the perl, tcl, tk, and test subpackages, enable the
newer intarray code, and disable kerberos support.

More of these conditionals will be added in the future.

CONTRIB FILES
-------------------------------------------------------------------------------
The contents of the contrib tree are packaged into the -contrib subpackage
and are processed with make and make install.  There is documentation in
/usr/share/doc/postgresql-contrib-VERSION for these modules.  Most of the
modules are in /usr/lib/pgsql for loadable modules, and binaries are in 
/usr/bin.  In the future these files may be split out, depending upon function
and dependencies.

LOGGING SET UP
-------------------------------------------------------------------------------
To get rollable syslog set up, see the documentation for the file
postgresql.conf, by default in the directory /var/lib/pgsql/data, as relates to
the syslog options.  Then, add a line to /etc/syslog.conf, using the man page
for syslog.conf as a source. Example:
If postgresql.conf has the following lines for the syslog settings:
syslog = 1 # range 0-2
syslog_facility = 'LOCAL0'
syslog_ident = 'postgres'

Then you need to add the line to /etc/syslog.conf:
local0.*			/var/log/postgresql 

Then set up an entry in /etc/logrotate.d to roll postgresql the way you want it
rolled.

MORE INFORMATION
-------------------------------------------------------------------------------
You can get more information at http://www.postgresql.org

Please help make this packaging better -- let me know if you find problems, or
better ways of doing things.  You can reach me by e-mail at
pgsql-ports@postgresql.org -- please include an [RPM] string in the subject, as
I use automatic mail folder processing to put mail in the right place.

SuSE information is available at SuSE's website and information contacts.
-----------------------------------------------------------------------------