mirror of
https://github.com/postgres/postgres.git
synced 2025-12-22 17:42:17 +03:00
221 lines
7.7 KiB
Plaintext
221 lines
7.7 KiB
Plaintext
<Sect1>
|
|
<Title>A Short History of <ProductName>Postgres</ProductName></Title>
|
|
|
|
<Sect2>
|
|
<Title>The Berkeley <ProductName>Postgres</ProductName> Project</Title>
|
|
|
|
<Para>
|
|
Implementation of the <ProductName>Postgres</ProductName>
|
|
<Acronym>DBMS</Acronym> began in 1986. The
|
|
initial concepts for the system were presented in
|
|
<XRef LinkEnd="STON86" endterm="STON86-full">
|
|
and the definition of the initial data model
|
|
appeared in
|
|
<XRef LinkEnd="ROWE87" endterm="ROWE87-full">.
|
|
The design of the rule system at
|
|
that time was described in
|
|
<XRef LinkEnd="STON87a" endterm="STON87a-full">.
|
|
The rationale
|
|
and architecture of the storage manager were detailed in
|
|
<XRef LinkEnd="STON87b" endterm="STON87b-full">.
|
|
</Para>
|
|
|
|
<Para>
|
|
<ProductName>Postgres</ProductName> has undergone several major releases since
|
|
then. The first "demoware" system became operational
|
|
in 1987 and was shown at the 1988 <Acronym>ACM-SIGMOD</Acronym>
|
|
Conference. We released Version 1, described in
|
|
<XRef LinkEnd="STON90a" endterm="STON90a-full">,
|
|
to a few external users in June 1989. In response to a
|
|
critique of the first rule system
|
|
(<XRef LinkEnd="STON89" endterm="STON89-full">),
|
|
the rule
|
|
system was redesigned
|
|
(<XRef LinkEnd="STON90b" endterm="STON90b-full">)
|
|
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.
|
|
</Para>
|
|
|
|
<Para>
|
|
<ProductName>Postgres</ProductName> 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.
|
|
<ProductName>Postgres</ProductName> has also been
|
|
used as an educational tool at several universities.
|
|
Finally,
|
|
<Ulink url="http://www.illustra.com/">Illustra Information Technologies</Ulink>
|
|
(since merged into
|
|
<Ulink url="http://www.informix.com/">Informix</Ulink>)
|
|
|
|
picked up
|
|
the code and commercialized it.
|
|
<ProductName>Postgres</ProductName> became the primary data manager
|
|
for the
|
|
<Ulink url="http://www.sdsc.edu/0/Parts_Collabs/S2K/s2k_home.html">Sequoia 2000</Ulink>
|
|
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.
|
|
</Para>
|
|
</Sect2>
|
|
|
|
<Sect2>
|
|
<Title><ProductName>Postgres95</ProductName></Title>
|
|
|
|
<Para>
|
|
In 1994,
|
|
<ULink url="mailto:ayu@informix.com">Andrew Yu</ULink>
|
|
and
|
|
<ULink url="http://http.cs.berkeley.edu/~jolly/">Jolly Chen</ULink>
|
|
added a SQL language interpreter to <ProductName>Postgres</ProductName>,
|
|
and the code was subsequently released to
|
|
the Web to find its own way in the world.
|
|
<ProductName>Postgres95</ProductName> was a public-domain, open source descendant
|
|
of this original Berkeley code.
|
|
</Para>
|
|
|
|
<Para>
|
|
<ProductName>Postgres95</ProductName> is a derivative of the last official release
|
|
of <ProductName>Postgres</ProductName> (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.
|
|
<ProductName>Postgres95</ProductName> 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:
|
|
|
|
<ItemizedList>
|
|
<ListItem>
|
|
<Para>
|
|
The query language <ProductName>Postquel</ProductName> has been replaced with
|
|
<Acronym>SQL</Acronym> (implemented in the server). We do not yet support
|
|
subqueries (which can be imitated with user defined
|
|
<Acronym>SQL</Acronym> functions). Aggregates have been
|
|
re-implemented. We also added support for ``GROUP BY''.
|
|
The <FileName>libpq</FileName> interface is still available for <Acronym>C</Acronym>
|
|
programs.
|
|
</Para>
|
|
</ListItem>
|
|
<ListItem>
|
|
<Para>
|
|
In addition to the monitor program, we provide a new
|
|
program (<Application>psql</Application>) which supports <Acronym>GNU</Acronym> <FileName>readline</FileName>.
|
|
</Para>
|
|
</ListItem>
|
|
<ListItem>
|
|
<Para>
|
|
We added a new front-end library, <FileName>libpgtcl</FileName>, that
|
|
supports <Acronym>Tcl</Acronym>-based clients. A sample shell,
|
|
pgtclsh, provides new Tcl commands to interface <Application>tcl</Application>
|
|
programs with the <ProductName>Postgres95</ProductName> backend.
|
|
</Para>
|
|
</ListItem>
|
|
<ListItem>
|
|
<Para>
|
|
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.)
|
|
</Para>
|
|
</ListItem>
|
|
<ListItem>
|
|
<Para>
|
|
The instance-level rule system has been removed.
|
|
Rules are still available as rewrite rules.
|
|
</Para>
|
|
</ListItem>
|
|
<ListItem>
|
|
<Para>
|
|
A short tutorial introducing regular <Acronym>SQL</Acronym> features as
|
|
well as those of ours is distributed with the source
|
|
code.
|
|
</Para>
|
|
</ListItem>
|
|
<ListItem>
|
|
<Para>
|
|
<Acronym>GNU</Acronym> make (instead of <Acronym>BSD</Acronym> make) is used for the
|
|
build. Also, <ProductName>Postgres95</ProductName> can be compiled with an
|
|
unpatched <ProductName>gcc</ProductName> (data alignment of doubles has been
|
|
fixed).
|
|
</Para>
|
|
</ListItem>
|
|
</ItemizedList>
|
|
</Para>
|
|
</Sect2>
|
|
|
|
<Sect2>
|
|
<Title><ProductName>PostgreSQL</ProductName></Title>
|
|
|
|
<Para>
|
|
By 1996, it became clear that the name <Quote>Postgres95</Quote> would not stand
|
|
the test of time. A new name, <ProductName>PostgreSQL</ProductName>,
|
|
was chosen to reflect the
|
|
relationship between original <ProductName>Postgres</ProductName>
|
|
and the more recent
|
|
versions with <Acronym>SQL</Acronym> 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 <ProductName>Postgres</ProductName> Project.
|
|
</Para>
|
|
|
|
<Para>
|
|
The emphasis on development for the v1.0.x releases of
|
|
<ProductName>Postgres95</ProductName>
|
|
was on stabilizing the backend code.
|
|
With the v6.x series of <ProductName>PostgreSQL</ProductName>,
|
|
the emphasis has shifted from
|
|
identifying and understanding existing problems in the backend
|
|
to augmenting features and capabilities, although
|
|
work continues in all areas.
|
|
</Para>
|
|
|
|
<Para>
|
|
Major enhancements include:
|
|
</Para>
|
|
|
|
<ItemizedList>
|
|
<ListItem>
|
|
<Para>
|
|
Important backend features, including subselects, defaults,
|
|
constraints, and triggers, have been implemented.
|
|
</Para>
|
|
</ListItem>
|
|
<ListItem>
|
|
<Para>
|
|
Additional <Acronym>SQL92</Acronym>-compliant language features have been added,
|
|
including primary keys, quoted identifiers, literal string type coersion,
|
|
type casting, and binary and hexadecimal integer input.
|
|
</Para>
|
|
</ListItem>
|
|
<ListItem>
|
|
<Para>
|
|
Built-in types have been improved, including new wide-range date/time types
|
|
and additional geometric type support.
|
|
</Para>
|
|
|
|
</ListItem>
|
|
<ListItem>
|
|
<Para>
|
|
Overall backend code speed has been increased by approximately 20-40%,
|
|
and backend startup time has decreased 80% since v6.0 was released.
|
|
</Para>
|
|
</ListItem>
|
|
</ItemizedList>
|
|
</Sect2>
|
|
|
|
</sect1>
|