<!--
$Header: /cvsroot/pgsql/doc/src/sgml/start.sgml,v 1.9 2000/03/31 03:27:41 thomas Exp $
-->

<Chapter Id="start">
<Title>Getting Started</Title>

<Abstract>
<Para>
How to begin work with <ProductName>Postgres</ProductName> for a new user.
</Para>
</Abstract>

<Para>
     Some  of the steps required to use <ProductName>Postgres</ProductName>
     can be performed by any Postgres user, and some must be done by
     the site database administrator.  This site administrator 
     is the person who installed the  software,  created
     the  database  directories  and  started the <Application>postmaster</Application>
     process.  This person does not  have  to  be  the  Unix
     superuser (<Quote>root</Quote>)
 or the computer system administrator; a person can install and use
<ProductName>Postgres</ProductName> without any special accounts or privileges.
</Para>

<Para>
If you are installing <ProductName>Postgres</ProductName> yourself, then
refer to the Administrator's Guide for instructions on installation, and return
to this guide when the installation is complete.
</Para>

<Para>
     Throughout this manual, any examples  that  begin  with
     the  character  <Quote>%</Quote> are commands that should be typed
     at the Unix shell prompt.  Examples that begin with the
     character <Quote>*</Quote> are commands in the Postgres query 
     language, Postgres <Acronym>SQL</Acronym>.
</Para>

<Sect1>
<Title>Setting Up Your Environment</Title>

<Para>
     This section discusses how to set up
     your own environment  so  that  you  can  use  frontend
     applications.  We assume <ProductName>Postgres</ProductName> has already been 
     successfully installed and started; refer to the Administrator's Guide
and the installation  notes
     for how to install Postgres.
</Para>

<Para>
<ProductName>Postgres</ProductName> is a client/server application. As a user,
you only need access to the client portions of the installation (an example
of a client application is the interactive monitor <Application>psql</Application>).
     For simplicity,
     we will assume that <ProductName>Postgres</ProductName> has been installed in  the
     directory  <FileName>/usr/local/pgsql</FileName>.   Therefore, wherever
     you see the directory <FileName>/usr/local/pgsql</FileName> you  should
     substitute  the name of the directory where <ProductName>Postgres</ProductName> is
     actually installed.
     All <ProductName>Postgres</ProductName> commands are installed  in  the  directory
     <FileName>/usr/local/pgsql/bin</FileName>.   Therefore,  you should add
     this directory to your shell command path.  If you  use
     a variant of the Berkeley C shell, such as csh or tcsh,
     you would add
<ProgramListing>
% set path = ( /usr/local/pgsql/bin path )
</ProgramListing>
     in the <FileName>.login</FileName> file in your home directory.  If you  use
     a  variant  of  the  Bourne  shell, such as sh, ksh, or
     bash, then you would add
<ProgramListing>
% PATH=/usr/local/pgsql/bin:$PATH
% export PATH
</ProgramListing>
     to the .profile file in your home directory.
     From now on, we will assume that  you  have  added  the
     <ProductName>Postgres</ProductName>  bin  directory to your path.  In addition, we
     will make frequent reference to <Quote>setting a shell  
     variable</Quote>  or  <Quote>setting an environment variable</Quote> throughout
     this document.  If you did  not  fully  understand  the
     last  paragraph  on  modifying  your  search  path, you
     should consult the Unix manual pages that describe your
     shell before going any further.
</Para>

<Para>
If your site administrator has not set things up in the
default  way,  you may have some more work to do.  For example, if the database
 server machine is a remote machine, you
will need to set the <Acronym>PGHOST</Acronym> environment variable to the name
of the database server machine.   The  environment  variable
<Acronym>PGPORT</Acronym> may also have to be set.  The bottom line is this: if
you try to start an application  program  and  it  complains
that it cannot connect to the <Application>postmaster</Application>,
 you should immediately consult your site administrator to make sure that your
environment is properly set up.
</Para>

</Sect1>

<Sect1>
<Title>Starting the Interactive Monitor (psql)</Title>

<Para>
     Assuming that  your  site  administrator  has  properly
     started  the  <Application>postmaster</Application>  process and authorized you to
     use the database, you (as a user) may begin to start up
     applications.   As previously mentioned, you should add
     <FileName>/usr/local/pgsql/bin</FileName> to your  shell  search  path.
     In  most  cases,  this  is all you should have to do in
     terms of preparation.
</Para>

<Para>
As of <ProductName>Postgres</ProductName> v6.3, two different styles of connections
are supported. The site administrator will have chosen to allow TCP/IP network connections
or will have restricted database access to local (same-machine) socket connections only.
These choices become significant if you encounter problems in connecting to a database.
</Para>

<Para>
     If  you get the following error message from a <ProductName>Postgres</ProductName>
     command (such as <Application>psql</Application> or <Application>createdb</Application>):

<ProgramListing>
% psql template1
Connection to database 'postgres' failed.
connectDB() failed: Is the postmaster running and accepting connections
    at 'UNIX Socket' on port '5432'?
</ProgramListing>

or

<ProgramListing>
% psql -h localhost template1
Connection to database 'postgres' failed.
connectDB() failed: Is the postmaster running and accepting TCP/IP
    (with -i) connections at 'localhost' on port '5432'?
</ProgramListing>

     it is usually because (1) the <Application>postmaster</Application>  is  not  running,
 or (2) you are attempting to connect to the wrong server host.
     If you get the following error message:

<ProgramListing>
FATAL 1:Feb 17 23:19:55:process userid (2360) != database owner (268)
</ProgramListing>

     it means that the site administrator started the  <Application>postmaster</Application>
  as  the  wrong user.  Tell him to restart it as
     the <ProductName>Postgres</ProductName> superuser.
</Para>
</Sect1>

<Sect1>
<Title>Managing a Database</Title>

<Para>
     Now that <ProductName>Postgres</ProductName> is up and running we can create  some
     databases  to  experiment  with.  Here, we describe the
     basic commands for managing a database.
</Para>

<Para>
Most <ProductName>Postgres</ProductName>
applications assume that the database name, if not specified, is the same as the name on your computer
account.
</Para>

<Para>
If your database administrator has set up your account without database creation privileges,
then she should have told you what the name of your database is. If this is the case, then you
can skip the sections on creating and destroying databases.
</Para>

<Sect2>
<Title>Creating a Database</Title>

<Para>
     Let's say you want to create  a  database  named  <Database>mydb</Database>.
     You can do this with the following command:
<ProgramListing>
% createdb mydb
</ProgramListing>
</Para>

<Para>
If you do not have the privileges required to create a database, you will see
the following:
<ProgramListing>
% createdb mydb
WARN:user "your username" is not allowed to create/destroy databases
createdb: database creation failed on mydb.
</ProgramListing>
</Para>

<Para>
     <ProductName>Postgres</ProductName>  allows  you to create any number of databases
     at a  given  site  and  you  automatically  become  the
     database  administrator  of  the database you just created.  Database names must  have  an  alphabetic  first
     character and are limited to 32 characters in length.
     Not  every  user has authorization to become a database
     administrator.  If <ProductName>Postgres</ProductName> refuses to create databases
     for you, then the site administrator needs to grant you
     permission to  create  databases.   Consult  your  site
     administrator if this occurs.
</Para>
</Sect2>

<Sect2>
<Title>Accessing a Database</Title>

<Para>
     Once you have constructed a database, you can access it
     by:

<ItemizedList Mark="bullet" Spacing="compact">
<ListItem>
<Para>
running the <ProductName>Postgres</ProductName>  terminal  monitor  programs
 (e.g. <Application>psql</Application>) which allows you to interactively
        enter, edit, and execute <Acronym>SQL</Acronym> commands.
</Para>
</ListItem>
<ListItem>
<Para>
      writing a <Acronym>C</Acronym>  program  using  the  LIBPQ  subroutine
        library.   This  allows  you  to submit <Acronym>SQL</Acronym> commands
        from <Acronym>C</Acronym> and get answers and status messages  back  to
        your  program.   This interface is discussed further
        in <citetitle>The PostgreSQL Programmer's Guide</citetitle>.
</Para>
</ListItem>
</ItemizedList>

You might want to start up <Application>psql</Application>, 
to try out the examples in this manual.
 It can be activated for the <Database>mydb</Database>
     database by typing the command:
<ProgramListing>
% psql mydb
</ProgramListing>

     You will be greeted with the following message:
<ProgramListing>
Welcome to the POSTGRESQL interactive sql monitor:
  Please read the file COPYRIGHT for copyright terms of POSTGRESQL

   type \? for help on slash commands
   type \q to quit
   type \g or terminate with semicolon to execute query
 You are currently connected to the database: template1

mydb=>
</ProgramListing>
</Para>

<Para>
This prompt indicates that the terminal monitor is listening
  to you and that you can type <Acronym>SQL</Acronym> queries into a
     workspace maintained by the terminal monitor.
     The <Application>psql</Application> program responds to escape  codes  that  begin
     with  the  backslash  character, <Quote>\</Quote>  For example, you
     can get help on the syntax of various
 <ProductName>Postgres</ProductName> <Acronym>SQL</Acronym> commands by typing:
<ProgramListing>
mydb=> \h
</ProgramListing>

     Once  you  have finished entering your queries into the
     workspace, you can pass the contents of  the  workspace
     to the <ProductName>Postgres</ProductName> server by typing:
<ProgramListing>
mydb=> \g
</ProgramListing>

     This  tells  the  server  to process the query.  If you
     terminate your query with a semicolon, the  <Quote>\g</Quote> is  not
     necessary.
     <Application>psql</Application> will automatically process semicolon terminated queries.
     To read queries from a file,  say  myFile,  instead  of
     entering them interactively, type:
<ProgramListing>
mydb=> \i fileName
</ProgramListing>

     To get out of <Application>psql</Application> and return to Unix, type
<ProgramListing>
mydb=> \q
</ProgramListing>

     and  <Application>psql</Application>  will  quit  and  return  you to your command
     shell. (For more escape codes, type <Command>\h</Command> at  the  monitor
     prompt.)
     White  space  (i.e.,  spaces, tabs and newlines) may be
     used freely in <Acronym>SQL</Acronym> queries.  Single-line comments  are  denoted  by
     <Quote>--</Quote>.   Everything  after the dashes up to the end of the
     line is ignored. Multiple-line comments, and comments within a line,
     are denoted by <Quote>/* ... */</Quote>
</Para>
</Sect2>
     
<Sect2>
<Title>Destroying a Database</Title>

<Para>
     If you are the database administrator for the  database
     <Database>mydb</Database>,  you can destroy it using the following Unix command:
<ProgramListing>
% dropdb mydb
</ProgramListing>
     This action physically removes all of  the  Unix  files
     associated  with  the database and cannot be undone, so
     this should only be done with a  great  deal  of  forethought.
</Para>
</Sect2>
</Sect1>

</Chapter>

<!-- Keep this comment at the end of the file
Local variables:
mode:sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
sgml-parent-document:nil
sgml-default-dtd-file:"./reference.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:("/usr/lib/sgml/catalog")
sgml-local-ecat-files:nil
End:
-->
