postgresql/doc/src/sgml/start.sgml

420 lines
15 KiB
Plaintext
Raw Normal View History

<!--
$Header: /cvsroot/pgsql/doc/src/sgml/start.sgml,v 1.26 2002/10/24 17:48:54 petere Exp $
-->
2001-09-03 01:27:50 +02:00
<chapter id="tutorial-start">
<title>Getting Started</title>
2001-09-03 01:27:50 +02:00
<sect1 id="tutorial-install">
<title>Installation</title>
<para>
Before you can use <productname>PostgreSQL</productname> you need
to install it, of course. It is possible that
<productname>PostgreSQL</productname> is already installed at your
site, either because it was included in your operating system
distribution or because the system administrator already installed
it. If that is the case, you should obtain information from the
operating system documentation or your system administrator about
how to access <productname>PostgreSQL</productname>.
</para>
<para>
2001-09-03 01:27:50 +02:00
If you are not sure whether <productname>PostgreSQL</productname>
is already available or whether you can use it for your
experimentation then you can install it yourself. Doing so is not
hard and it can be a good exercise.
<productname>PostgreSQL</productname> can be installed by any
unprivileged user, no superuser (<systemitem>root</systemitem>)
access is required.
</para>
<para>
2001-09-03 01:27:50 +02:00
If you are installing <productname>PostgreSQL</productname>
yourself, then refer to the &cite-admin;
for instructions on installation, and return to
2001-09-03 01:27:50 +02:00
this guide when the installation is complete. Be sure to follow
closely the section about setting up the appropriate environment
variables.
</para>
<para>
2001-09-03 01:27:50 +02:00
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 <envar>PGHOST</envar> environment variable to the name of the
database server machine. The environment variable
<envar>PGPORT</envar> 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 database, you should consult your
site administrator or, if that is you, the documentation to make
sure that your environment is properly set up. If you did not
understand the preceding paragraph then read the next section.
</para>
2001-09-03 01:27:50 +02:00
</sect1>
<sect1 id="tutorial-arch">
<title>Architectural Fundamentals</title>
<para>
2001-09-03 01:27:50 +02:00
Before we proceed, you should understand the basic
<productname>PostgreSQL</productname> system architecture.
Understanding how the parts of
2001-11-28 21:49:10 +01:00
<productname>PostgreSQL</productname> interact will make this
2001-09-03 01:27:50 +02:00
chapter somewhat clearer.
</para>
2001-09-03 01:27:50 +02:00
<para>
In database jargon, <productname>PostgreSQL</productname> uses a
client/server model. A <productname>PostgreSQL</productname>
session consists of the following cooperating processes
(programs):
<itemizedlist>
<listitem>
<para>
A server process, which manages the database files, accepts
connections to the database from client applications, and
performs actions on the database on behalf of the clients. The
database server program is called
<filename>postmaster</filename>.
<indexterm><primary>postmaster</primary></indexterm>
</para>
</listitem>
<listitem>
<para>
The user's client (frontend) application that wants to perform
database operations. Client applications can be very diverse
in nature: a client could be a text-oriented tool, a graphical
2001-09-03 01:27:50 +02:00
application, a web server that accesses the database to
display web pages, or a specialized database maintenance tool.
Some client applications are supplied with the
<productname>PostgreSQL</productname> distribution, most are
developed by users.
</para>
</listitem>
</itemizedlist>
</para>
<para>
As is typical of client/server applications, the client and the
server can be on different hosts. In that case they communicate
over a TCP/IP network connection. You should keep this in mind,
because the files that can be accessed on a client machine might
not be accessible (or might only be accessible using a different
2001-11-28 21:49:10 +01:00
file name) on the database server machine.
2001-09-03 01:27:50 +02:00
</para>
<para>
The <productname>PostgreSQL</productname> server can handle
multiple concurrent connections from clients. For that purpose it
starts (<quote>forks</quote>) a new process for each connection.
From that point on, the client and the new server process
communicate without intervention by the original
<filename>postmaster</filename> process. Thus, the
<filename>postmaster</filename> is always running, waiting for
client connections, whereas client and associated server processes
come and go. (All of this is of course invisible to the user. We
only mention it here for completeness.)
</para>
</sect1>
2001-09-03 01:27:50 +02:00
<sect1 id="tutorial-createdb">
<title>Creating a Database</title>
<indexterm zone="tutorial-createdb">
<primary>database</primary>
<secondary>creating</secondary>
</indexterm>
<indexterm zone="tutorial-createdb">
<primary>createdb</primary>
</indexterm>
<para>
2001-09-03 01:27:50 +02:00
The first test to see whether you can access the database server
is to try to create a database. A running
<productname>PostgreSQL</productname> server can manage many
databases. Typically, a separate database is used for each
project or for each user.
</para>
<para>
2001-09-03 01:27:50 +02:00
Possibly, your site administrator has already created a database
for your use. He should have told you what the name of your
database is. In this case you can omit this step and skip ahead
to the next section.
</para>
<para>
2001-09-03 01:27:50 +02:00
To create a new database, in this example named
2002-01-20 23:19:57 +01:00
<literal>mydb</literal>, you use the following command:
2001-09-03 01:27:50 +02:00
<screen>
<prompt>$</prompt> <userinput>createdb mydb</userinput>
</screen>
This should produce as response:
<screen>
CREATE DATABASE
</screen>
2001-11-23 22:08:51 +01:00
If so, this step was successful and you can skip over the
2001-09-03 01:27:50 +02:00
remainder of this section.
</para>
2001-09-03 01:27:50 +02:00
<para>
If you see a message similar to
<screen>
createdb: command not found
</screen>
then <productname>PostgreSQL</> was not installed properly. Either it was not
2001-09-03 01:27:50 +02:00
installed at all or the search path was not set correctly. Try
calling the command with an absolute path instead:
<screen>
2001-11-23 22:08:51 +01:00
<prompt>$</prompt> <userinput>/usr/local/pgsql/bin/createdb mydb</userinput>
2001-09-03 01:27:50 +02:00
</screen>
The path at your site might be different. Contact your site
administrator or check back in the installation instructions to
correct the situation.
</para>
<para>
Another response could be this:
<screen>
psql: could not connect to server: Connection refused
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
2001-09-03 01:27:50 +02:00
createdb: database creation failed
</screen>
This means that the server was not started, or it was not started
where <command>createdb</command> expected it. Again, check the
installation instructions or consult the administrator.
</para>
1998-03-01 09:16:16 +01:00
2001-09-03 01:27:50 +02:00
<para>
If you do not have the privileges required to create a database,
you will see the following:
<screen>
ERROR: CREATE DATABASE: permission denied
createdb: database creation failed
</screen>
Not every user has authorization to create new databases. If
<productname>PostgreSQL</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. If you installed <productname>PostgreSQL</productname>
yourself then you should log in for the purposes of this tutorial
under the user account that you started the server as.
<footnote>
<para>
As an explanation for why this works:
<productname>PostgreSQL</productname> user names are separate
from operating system user accounts. If you connect to a
database, you can choose what
<productname>PostgreSQL</productname> user name to connect as;
if you don't, it will default to the same name as your current
operating system account. As it happens, there will always be a
<productname>PostgreSQL</productname> user account that has the
same name as the operating system user that started the server,
and it also happens that that user always has permission to
create databases. Instead of logging in as that user you can
also specify the <option>-U</option> option everywhere to select
a <productname>PostgreSQL</productname> user name to connect as.
</para>
</footnote>
</para>
<para>
You can also create databases with other names.
<productname>PostgreSQL</productname> allows you to create any
number of databases at a given site. Database names must have an
alphabetic first character and are limited to 63 characters in
2001-09-03 01:27:50 +02:00
length. A convenient choice is to create a database with the same
name as your current user name. Many tools assume that database
name as the default, so it can save you some typing. To create
that database, simply type
<screen>
<prompt>$</prompt> <userinput>createdb</userinput>
</screen>
</para>
<para>
If you don't want to use your database anymore you can remove it.
For example, if you are the owner (creator) of the database
2002-01-20 23:19:57 +01:00
<literal>mydb</literal>, you can destroy it using the following
2001-09-03 01:27:50 +02:00
command:
<screen>
<prompt>$</prompt> <userinput>dropdb mydb</userinput>
</screen>
2001-11-23 22:08:51 +01:00
(For this command, the database name does not default to the user
2001-09-03 01:27:50 +02:00
account name. You always need to specify it.) This action
physically removes all files associated with the database and
cannot be undone, so this should only be done with a great deal of
forethought.
</para>
</sect1>
1998-03-01 09:16:16 +01:00
2001-09-03 01:27:50 +02:00
<sect1 id="tutorial-accessdb">
<title>Accessing a Database</title>
<indexterm zone="tutorial-accessdb">
<primary>psql</primary>
</indexterm>
<para>
Once you have created a database, you can access it by:
<itemizedlist spacing="compact" mark="bullet">
<listitem>
<para>
Running the <productname>PostgreSQL</productname> interactive
2002-01-20 23:19:57 +01:00
terminal program, called <application><firstterm>psql</></application>, which allows you
2001-09-03 01:27:50 +02:00
to interactively enter, edit, and execute
<acronym>SQL</acronym> commands.
</para>
</listitem>
<listitem>
<para>
2001-09-03 01:27:50 +02:00
Using an existing graphical frontend tool like
<application>PgAccess</application> or
<application>ApplixWare</application> (via
<acronym>ODBC</acronym>) to create and manipulate a database.
These possibilities are not covered in this tutorial.
</para>
</listitem>
<listitem>
<para>
2001-09-03 01:27:50 +02:00
Writing a custom application, using one of the several
available language bindings. These possibilities are discussed
further in the &cite-programmer;.
</para>
</listitem>
</itemizedlist>
2001-09-03 01:27:50 +02:00
You probably want to start up <command>psql</command>, to try out
the examples in this tutorial. It can be activated for the
2002-01-20 23:19:57 +01:00
<literal>mydb</literal> database by typing the command:
2001-09-03 01:27:50 +02:00
<screen>
<prompt>$</prompt> <userinput>psql mydb</userinput>
</screen>
If you leave off the database name then it will default to your
user account name. You already discovered this scheme in the
previous section.
</para>
<para>
2001-09-03 01:27:50 +02:00
In <command>psql</command>, you will be greeted with the following
message:
<screen>
Welcome to psql &version;, the PostgreSQL interactive terminal.
2001-09-03 01:27:50 +02:00
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help on internal slash commands
\g or terminate with semicolon to execute query
\q to quit
mydb=&gt;
</screen>
<indexterm><primary>superuser</primary></indexterm>
The last line could also be
<screen>
mydb=#
</screen>
That would mean you are a database superuser, which is most likely
the case if you installed <productname>PostgreSQL</productname>
yourself. Being a superuser means that you are not subject to
access controls. For the purpose of this tutorial this is not of
importance.
</para>
2001-09-03 01:27:50 +02:00
<para>
If you have encountered problems starting <command>psql</command>
then go back to the previous section. The diagnostics of
<command>psql</command> and <command>createdb</command> are
similar, and if the latter worked the former should work as well.
</para>
<para>
2001-09-03 01:27:50 +02:00
The last line printed out by <command>psql</command> is the
prompt, and it indicates that <command>psql</command> is listening
to you and that you can type <acronym>SQL</acronym> queries into a
2002-01-20 23:19:57 +01:00
work space maintained by <command>psql</command>. Try out these
2001-09-03 01:27:50 +02:00
commands:
<indexterm><primary>version</primary></indexterm>
<screen>
<prompt>mydb=&gt;</prompt> <userinput>SELECT version();</userinput>
version
----------------------------------------------------------------
PostgreSQL 7.3devel on i586-pc-linux-gnu, compiled by GCC 2.96
2001-09-03 01:27:50 +02:00
(1 row)
<prompt>mydb=&gt;</prompt> <userinput>SELECT current_date;</userinput>
date
------------
2002-08-31
2001-09-03 01:27:50 +02:00
(1 row)
<prompt>mydb=&gt;</prompt> <userinput>SELECT 2 + 2;</userinput>
?column?
----------
4
(1 row)
</screen>
</para>
<para>
2001-09-03 01:27:50 +02:00
The <command>psql</command> program has a number of internal
commands that are not SQL commands. They begin with the backslash
2001-09-03 01:27:50 +02:00
character, <quote><literal>\</literal></quote>. Some of these
commands were listed in the welcome message. For example,
2001-09-03 01:27:50 +02:00
you can get help on the syntax of various
<productname>PostgreSQL</productname> <acronym>SQL</acronym>
commands by typing:
<screen>
<prompt>mydb=&gt;</prompt> <userinput>\h</userinput>
</screen>
</para>
<para>
2001-09-03 01:27:50 +02:00
To get out of <command>psql</command>, type
<screen>
<prompt>mydb=&gt;</prompt> <userinput>\q</userinput>
</screen>
and <command>psql</command> will quit and return you to your
command shell. (For more internal commands, type
<literal>\?</literal> at the <command>psql</command> prompt.) The
full capabilities of <command>psql</command> are documented in
the &cite-reference;. If <productname>PostgreSQL</> is
2001-09-03 01:27:50 +02:00
installed correctly you can also type <literal>man psql</literal>
at the operating system shell prompt to see the documentation. In
this tutorial we will not use these features explicitly, but you
can use them yourself when you see fit.
</para>
</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:
-->