Introduction
This document is the user manual for the
PostgreSQL
database management system, originally developed at the University
of California at Berkeley. PostgreSQL is based on
Postgres release 4.2.
The Postgres project,
led by Professor Michael Stonebraker, has been sponsored by the
Defense Advanced Research Projects Agency (DARPA), the
Army Research Office (ARO), the National Science
Foundation (NSF), and ESL, Inc.
What is Postgres?
Traditional relational database management systems
(DBMSs) support a data model consisting of a collection
of named relations, containing attributes of a specific
type. In current commercial systems, possible types
include floating point numbers, integers, character
strings, money, and dates. It is commonly recognized
that this model is inadequate for future data
processing applications.
The relational model successfully replaced previous
models in part because of its "Spartan simplicity".
However, as mentioned, this simplicity often makes the
implementation of certain applications very difficult.
Postgres offers substantial additional
power by incorporating the following four additional
basic concepts in such a way that users can easily
extend the system:
classes
inheritance
types
functions
Other features provide additional power and flexibility:
constraints
triggers
rules
transaction integrity
These features put Postgres into the category of databases
referred to as object-relational. Note that this is distinct
from those referred to as object-oriented, which in general
are not as well suited to supporting the traditional relational database languages.
So, although Postgres has some object-oriented features,
it is firmly in the relational database world. In fact, some commercial databases
have recently incorporated features pioneered by Postgres.
A Short History of Postgres
The Berkeley Postgres Project
Implementation of the Postgres DBMS began in 1986. The
initial concepts for the system were presented in
[STON86]
and the definition of the initial data model
appeared in
[ROWE87].
The design of the rule system at
that time was described in
[STON87a].
The rationale
and architecture of the storage manager were detailed in
[STON87b].
Postgres has undergone several major releases since
then. The first "demoware" system became operational
in 1987 and was shown at the 1988 ACM-SIGMOD
Conference. We released Version 1, described in
[STON90a],
to a few external users in June 1989. In response to a
critique of the first rule system
([STON89]),
the rule
system was redesigned
([STON90b])
and Version 2 was
released in June 1990 with the new rule system.
Version 3 appeared in 1991 and added support for multiple
storage managers, an improved query executor, and a
rewritten rewrite rule system. For the most part,
releases since then have focused on portability and
reliability.
Postgres has been used to implement many different
research and production applications. These include: a
financial data analysis system, a jet engine
performance monitoring package, an asteroid tracking
database, a medical information database, and several
geographic information systems. Postgres has also been
used as an educational tool at several universities.
Finally, Illustra Information Technologies picked up
the code and commercialized it.
Postgres became the primary data manager for the
Sequoia 2000
scientific computing project in late 1992.
Furthermore, the size of the external user community
nearly doubled during 1993. It became increasingly
obvious that maintenance of the prototype code and
support was taking up large amounts of time that should
have been devoted to database research. In an effort
to reduce this support burden, the project officially
ended with Version 4.2.
Postgres95
In 1994,
Andrew Yu
and
Jolly Chen
added a SQL language interpreter to Postgres, and the code was subsequently released to
the Web to find its own way in the world. Postgres95 was a public-domain, open source descendant
of this original Berkeley code.
Postgres95 is a derivative of the last official release
of Postgres (version 4.2). The code is now completely
ANSI C and the code size has been trimmed by 25%. There
are a lot of internal changes that improve performance
and code maintainability. Postgres95 v1.0.x runs about 30-50%
faster on the Wisconsin Benchmark compared to v4.2.
Apart from bug fixes, these are the major enhancements:
The query language Postquel has been replaced with
SQL (implemented in the server). We do not yet support
subqueries (which can be imitated with user defined
SQL functions). Aggregates have been
re-implemented. We also added support for ``GROUP BY''.
The libpq interface is still available for C
programs.
In addition to the monitor program, we provide a new
program (psql) which supports GNU readline.
We added a new front-end library, libpgtcl, that
supports Tcl-based clients. A sample shell,
pgtclsh, provides new Tcl commands to interface tcl
programs with the Postgres95 backend.
The large object interface has been overhauled. We
kept Inversion large objects as the only mechanism
for storing large objects. (This is not to be
confused with the Inversion file system which has been
removed.)
The instance-level rule system has been removed.
Rules are still available as rewrite rules.
A short tutorial introducing regular SQL features as
well as those of ours is distributed with the source
code.
GNU make (instead of BSD make) is used for the
build. Also, Postgres95 can be compiled with an
unpatched gcc (data alignment of doubles has been
fixed).
PostgreSQL
By 1996, it became clear that the name Postgres95
would not stand
the test of time. A new name, PostgreSQL, was chosen to reflect the
relationship between original Postgres and the more recent
versions with SQL capability. At the same time, the version numbering
was reset to start at 6.0, putting the numbers back into the sequence originally begun by
the Postgres Project.
The emphasis on development for the v1.0.x releases of Postgres95
was on stabilizing the backend code.
With the v6.x series of PostgreSQL, the emphasis has shifted from
identifying and understanding existing problems in the backend to augmenting features and capabilities, although
work continues in all areas.
Major enhancements include:
Important backend features, including subselects, defaults, constraints, and triggers, have been implemented.
Additional SQL92-compliant language features have been added,
including primary keys, quoted identifiers, literal string type coersion, type casting,
and binary and hexadecimal integer input.
Built-in types have been improved, including new wide-range date/time types and additional geometric type support.
Overall backend code speed has been increased by approximately 20%, and backend startup speed has decreased 80%.
About This Release
From now on, We will use Postgres to mean PostgreSQL.
PostgreSQL is available without cost. This manual
describes version 6.3 of PostgreSQL.
Check the Administrator's Guide for a list of currently supported machines. In general,
PostgreSQL is portable to any Unix/Posix-compatible system
with full libc library support.
Resources
This manual set is organized into several parts:
Tutorial
An introduction for new users. Does not cover advanced features.
User's Guide
General information for users, including available commands and data types.
Programmer's Guide
Advanced information for application programmers. Topics include
type and function extensibility, library interfaces, and application design issues.
Administrator's Guide
Installation and management information. List of supported machines.
Developer's Guide
Information for Postgres developers. This is intended
for those who are contributing to the Postgres
project; application development information should appear in the Programmer's Guide.
Reference Manual
Detailed reference information on command syntax.
At the moment, this manual is very sparse, but eventually should contain
information similar to that in the man pages.
In addition to this manual set, there are other resources to help you with
Postgres installation and use:
man pages
The man pages have general information on command syntax.
FAQs
The Frequently Asked Questions (FAQ) documents address both general issues
and some platform-specific issues.
READMEs
README files are available for some contributed packages.
Web Site
The Postgres web site has some information
not appearing in the distribution. There is a mhonarc catalog of mailing list traffic
which is a rich resource for many topics.
Mailing Lists
The Postgres Questions
mailing list is a good place to have user questions answered. Other mailing lists are available; consult
the web page for details.
Yourself!
Postgres is an open source product. As such, it depends on the user community for
ongoing support. As you begin to use Postgres, you will rely on others
for help, either through the documentation or through the mailing lists. Consider contributing your
knowledge back. If you learn something which is not in the documentation, write it up and contribute it.
If you add features to the code, contribute it. Even those without a lot of experience can provide
corrections and minor changes in the documentation, and that is a good way to start.
The Postgres Documentation
mailing list is the place to get going.
Copyrights and Trademarks
PostgreSQL is copyright (C) 1996-8 by the PostgreSQL Global Development Group,
and is distributed under the terms of the Berkeley license.
Postgres95 is copyright (C) 1994-5 by the Regents of the University of California.
Permission to use, copy, modify, and distribute this software and its documentation
for any purpose, without fee, and without a written agreement is hereby granted,
provided that the above copyright notice and this paragraph and the following two
paragraphs appear in all copies.
In no event shall the University of California be liable to
any party for direct, indirect, special, incidental, or consequential
damages, including lost profits, arising out of the use of this
software and its documentation, even if the University of California
has been advised of the possibility of such damage.
The University of California specifically disclaims any
warranties, including, but not limited to, the implied warranties
of merchantability and fitness for a particular purpose.
The software provided hereunder is on an "as-is" basis, and
the University of California has no obligations to provide
maintainance, support, updates, enhancements, or modifications.
UNIX is a trademark of X/Open, Ltd. Sun4, SPARC, SunOS
and Solaris are trademarks of Sun Microsystems, Inc. DEC,
DECstation, Alpha AXP and ULTRIX are trademarks of Digital
Equipment Corp. PA-RISC and HP-UX are trademarks of
Hewlett-Packard Co. OSF/1 is a trademark of the Open
Software Foundation.