Starting the Server and Creating Databases


Usually, RPM packages of PostgreSQL contain scripts for starting and shutting down PostgreSQL properly.

Using a Startup Script

First you check whether the postmaster is running. On UNIX systems, this can easily be done with the following command:

 [root@duron /root]# /etc/rc.d/init.d/postgresql status postmaster (pid 4114 4089 4086 4085 4083 4082 4081 4080 4079 4075) is running... 

This command works for RedHat 7.1 systems with PostgreSQL RPM packages installed. In the example, you can see that the postmaster is up and running. You can also check whether PostgreSQL is running by using a command like this one:

 [hs@duron hs]$ ps ax  grep postmaster  4075 ?       SN     0:00 /usr/local/postgres/bin/postmaster -i -D /data/postgres 14111 pts/0    S     0:00 grep postmaster 

Simply pipe the process table (try ps ax on Linux) to the grep command by using your favorite UNIX shell.

Note

grep commands can differ slightly on various UNIX versions, such as IBM's AIX or Sun Solaris. Many UNIX systems require a hyphen ( - ) before the option (for example, ps -ax ). Check out the man pages for further information about grep on your system.


To start the server, you can use this command:

 [root@duron /root]# /etc/rc.d/init.d/postgresql start 

Shutting down the server can be done by using stop instead of start .

Using pg_ctl Directly

If you don't have init scripts installed on your machine or if you want to have a more flexible way for starting your server, you can use pg_ctl directly.

Here is an overview of the command's syntax:

 [root@athlon /root]# pg_ctl --help pg_ctl is a utility to start, stop, restart, and report the status of a PostgreSQL server. Usage:   pg_ctl start   [-w] [-D DATADIR] [-s] [-l FILENAME] [-o "OPTIONS"]   pg_ctl stop    [-W] [-D DATADIR] [-s] [-m SHUTDOWN-MODE]   pg_ctl restart [-w] [-D DATADIR] [-s] [-m SHUTDOWN-MODE] [-o "OPTIONS"]   pg_ctl status  [-D DATADIR] Common options:   -D DATADIR            Location of the database storage area   -s                    Only print errors, no informational messages   -w                    Wait until operation completes   -W                    Do not wait until operation completes (The default is to wait for shutdown, but not for start or restart.) If the -D option is omitted, the environment variable PGDATA is used. Options for start or restart:   -l FILENAME           Write (or append) server log to FILENAME.  The                        use of this option is highly recommended.   -o OPTIONS            Command line options to pass to the postmaster                        (PostgreSQL server executable)   -p PATH-TO-POSTMASTER  Normally not necessary Options for stop or restart:   -m SHUTDOWN-MODE       May be 'smart', 'fast', or 'immediate' Shutdown modes are:   smart                 Quit after all clients have disconnected   fast                  Quit directly, with proper shutdown   immediate             Quit without complete shutdown; will lead                         to recovery run on restart Report bugs to <pgsql-bugs@postgresql.org>. 

Let's try to start PostgreSQL. Use -D to define the directory where your PostgreSQL databases can be found:

 [root@athlon /root]# pg_ctl -D /data/postgresql/ start postmaster successfully started "root" execution of the PostgreSQL server is not permitted. The server must be started under an unprivileged userid to prevent a possible system security compromise. See the INSTALL file for more information on how to properly start the server. 

You can see that an error has occurred, because the PostgreSQL daemon must not be launched as root .

For security reasons, you should create a user called postgres that is used solely by the PostgreSQL daemon. Switch to user postgres and try to start the server again ”this time you use some additional parameters:

 bash-2.04$ pg_ctl -D /data/postgresql/ -o "-i" -l /tmp/postgresql.log start postmaster successfully started 

As you can see, the server has successfully been started. This time you have also passed some additional options to pg_ctl . -o tells the server to pass -i to the backend process. -i makes PostgreSQL backend processes listen to remote hosts so that the database cannot be used only locally. Don't forget this flag or there will be no way to make PostgreSQL listen to remote requests , even if you add entries to pg_hba.conf . (You take a close look at this file in Chapter 6, "Database Administration.") -l defines a file PostgreSQL will send the logging information to. Using -l is recommended because you might need it for debugging purposes.

Creating Databases

You create databases with the createdb command. Here is an overview of its syntax:

 [hs@athlon hs]$ createdb --help createdb creates a PostgreSQL database. Usage:   createdb [options] dbname [description] Options:   -D, --location=PATH             Alternative place to store the database   -T, --template=TEMPLATE         Template database to copy   -E, --encoding=ENCODING         Multibyte encoding for the database   -h, --host=HOSTNAME             Database server host   -p, --port=PORT                Database server port   -U, --username=USERNAME         Username to connect as   -W, --password                 Prompt for password   -e, --echo                     Show the query being sent to the backend   -q, --quiet                    Don't write any messages By default, a database with the same name as the current user is created. Report bugs to <pgsql-bugs@postgresql.org>. 

If the postmaster is up and running, you can log in as user postgres and type createdb name , with name being the name for your database in your UNIX shell:

 bash-2.04$ createdb name CREATE DATABASE 

If your result looks like the preceding line, you have successfully created a new PostgreSQL database. If you received a result like this, it didn't work:

 [root@duron /root]# createdb name psql: FATAL 1:  SetUserId: user 'root' is not in 'pg_shadow' createdb: database creation failed 

In this example, user root doesn't have the privilege to create databases because there is no user called root in the system tables. You will learn how to set permissions for your PostgreSQL box later in this book.

The name of your PostgreSQL database can be up to 32 characters long. The first character in the name has to be an alphabetic one. You can choose any name for your database, but it's wise to use one that describes what the database is being used for.

Sometimes it is necessary not to use the standard character set. By default, PostgreSQL uses SQL_ASCII; in some cases this won't be the right character set, and you have to tell PostgreSQL to use a different one.

This example shows how to create a database that uses UNICODE as the default character set:

 [hs@athlon hs]$ createdb --encoding=UNICODE myunicode CREATE DATABASE 

To see whether the database has been created successfully, you use this command ( psql -l lists all databases that are currently available on the system):

 [hs@athlon hs]$ psql -l        List of databases   Database   Owner  Encoding ------------+-------+-----------  db          erich  SQL_ASCII  myunicode   hs     UNICODE  template0   hs     SQL_ASCII  template1   hs     SQL_ASCII (4 rows) 

As you can see, the database myunicode uses UNICODE instead of SQL_ASCII .

Login

If you have successfully created a new database, you can connect yourself to it. Become user postgres and type psql name , with name being the name of the database you want to connect to, into your UNIX shell:

 bash-2.04$ psql name Welcome to psql, the PostgreSQL interactive terminal. 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 name=# 

If your screen now looks something like this example, you have successfully connected to your PostgreSQL database. If you get an error, you have possibly tried to connect to the database as the wrong user or you haven't created your database correctly.

Let's try a simple query to see whether PostgreSQL works:

 name=# SELECT 1+1;  ?column? ----------         2 (1 row) 

1+1 makes two ”it seems the database works correctly so far.



PostgreSQL Developer's Handbook2001
PostgreSQL Developer's Handbook2001
ISBN: N/A
EAN: N/A
Year: 2004
Pages: 125

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net