<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>
