whose pay changed in the second quarter:
<ProgramListing>
-SELECT name
- FROM SAL_EMP
- WHERE SAL_EMP.pay_by_quarter[1] <>
- SAL_EMP.pay_by_quarter[2];
+SELECT name FROM sal_emp WHERE pay_by_quarter[1] <> pay_by_quarter[2];
-+------+
-|name |
-+------+
-|Carol |
-+------+
+ name
+-------
+ Carol
+(1 row)
</ProgramListing>
</Para>
employees:
<ProgramListing>
-SELECT SAL_EMP.pay_by_quarter[3] FROM SAL_EMP;
+SELECT pay_by_quarter[3] FROM sal_emp;
-
-+---------------+
-|pay_by_quarter |
-+---------------+
-|10000 |
-+---------------+
-|25000 |
-+---------------+
+ pay_by_quarter
+----------------
+ 10000
+ 25000
+(2 rows)
</ProgramListing>
</Para>
Bill's schedule for the first two days of the week.
<ProgramListing>
-SELECT SAL_EMP.schedule[1:2][1:1]
- FROM SAL_EMP
- WHERE SAL_EMP.name = 'Bill';
+SELECT schedule[1:2][1:1] FROM sal_emp WHERE name = 'Bill';
-+-------------------+
-|schedule |
-+-------------------+
-|{{"meeting"},{""}} |
-+-------------------+
+ schedule
+--------------------
+ {{"meeting"},{""}}
+(1 row)
</ProgramListing>
</Para>
<entry>ISO-8601</entry>
</row>
<row>
- <entry>040506-08/entry>
+ <entry>040506-08</entry>
<entry>ISO-8601</entry>
</row>
</tbody>
state capitals which are also cities. Naturally, the
capitals class should inherit from cities.
- <programlisting>
+<programlisting>
CREATE TABLE cities (
name text,
population float,
CREATE TABLE capitals (
state char(2)
) INHERITS (cities);
- </programlisting>
+</programlisting>
In this case, an instance of capitals <firstterm>inherits</firstterm> all
attributes (name, population, and altitude) from its
For example, the following query finds
all the cities that are situated at an attitude of 500ft or higher:
- <programlisting>
+<programlisting>
SELECT name, altitude
FROM cities
WHERE altitude > 500;
-+----------+----------+
-|name | altitude |
-+----------+----------+
-|Las Vegas | 2174 |
-+----------+----------+
-|Mariposa | 1953 |
-+----------+----------+
- </programlisting>
+ name | altitude
+-----------+----------
+ Las Vegas | 2174
+ Mariposa | 1953
+(2 rows)
+</programlisting>
</para>
<para>
including state capitals, that are located at an altitude
over 500ft, the query is:
- <programlisting>
+<programlisting>
SELECT c.name, c.altitude
FROM cities* c
WHERE c.altitude > 500;
- </programlisting>
+</programlisting>
which returns:
- <programlisting>
-+----------+----------+
-|name | altitude |
-+----------+----------+
-|Las Vegas | 2174 |
-+----------+----------+
-|Mariposa | 1953 |
-+----------+----------+
-|Madison | 845 |
-+----------+----------+
- </programlisting>
+<programlisting>
+ name | altitude
+-----------+----------
+ Las Vegas | 2174
+ Mariposa | 1953
+ Madison | 845
+</programlisting>
Here the <quote>*</quote> after cities indicates that the query should
be run over cities and all classes below cities in the
to try out the examples in this manual. It can be activated for the
<replaceable class="parameter">dbname</replaceable> database by typing the command:
- <programlisting>
-% psql <replaceable class="parameter">dbname</replaceable>
- </programlisting>
+<programlisting>
+psql <replaceable class="parameter">dbname</replaceable>
+</programlisting>
You will be greeted with the following message:
- <programlisting>
-Welcome to the Postgres interactive sql monitor:
+<programlisting>
+Welcome to psql, the PostgreSQL interactive terminal.
- 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: <replaceable>dbname</replaceable>
+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
<replaceable>dbname</replaceable>=>
- </programlisting>
+</programlisting>
</para>
<para>
<Para>
To create a new database named <Quote>mydb</Quote> from the command line, type
- <ProgramListing>
+<ProgramListing>
% createdb mydb
- </ProgramListing>
+</ProgramListing>
and to do the same from within <Application>psql</Application> type
- <ProgramListing>
-* CREATE DATABASE mydb;
- </ProgramListing>
+<ProgramListing>
+=> CREATE DATABASE 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>
+<ProgramListing>
+ERROR: CREATE DATABASE: Permission denied.
+</ProgramListing>
</Para>
<Para>
ensure that <FileName>/alt/postgres</FileName> already exists and is writable by
the Postgres administrator account.
Then, from the command line, type
- <ProgramListing>
-% initlocation $PGDATA2
+<ProgramListing>
+% initlocation PGDATA2
Creating Postgres database system directory /alt/postgres/data
Creating Postgres database system directory /alt/postgres/data/base
- </ProgramListing>
+</ProgramListing>
</Para>
<Para>
To create a database in the alternate storage area <envar>PGDATA2</envar>
from the command line, use the following command:
- <ProgramListing>
+<ProgramListing>
% createdb -D PGDATA2 mydb
- </ProgramListing>
+</ProgramListing>
and to do the same from within <Application>psql</Application> type
- <ProgramListing>
-* CREATE DATABASE mydb WITH LOCATION = 'PGDATA2';
- </ProgramListing>
+<ProgramListing>
+=> CREATE DATABASE mydb WITH LOCATION = 'PGDATA2';
+</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>
+<ProgramListing>
+ERROR: CREATE DATABASE: permission denied
+</ProgramListing>
</Para>
<Para>
If the specified location does not exist or the database backend does not have
permission to access it or to write to directories under it, you will see
the following:
- <ProgramListing>
-% createdb -D /alt/postgres/data mydb
-ERROR: Unable to create database directory /alt/postgres/data/base/mydb
-createdb: database creation failed on mydb.
- </ProgramListing>
+<ProgramListing>
+ERROR: The database path '/no/where' is invalid. This may be due to a character that is not allowed or because the chosen path isn't permitted for databases.
+</ProgramListing>
</Para>
</Sect1>
<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.
+running the <ProductName>PostgreSQL</ProductName> interactive terminal
+<Application>psql</Application> which allows you to interactively
+enter, edit, and execute <Acronym>SQL</Acronym> commands.
</Para>
</ListItem>
<ListItem>
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
+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
mydb=>
</ProgramListing>
</Para>
<Para>
-This prompt indicates that the terminal monitor is listening
+This prompt indicates that psql 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:
+ <ProductName>PostgreSQL</ProductName> <Acronym>SQL</Acronym> commands by typing:
<ProgramListing>
mydb=> \h
</ProgramListing>
</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
+ shell. (For more escape codes, type <Command>\?</Command> at the psql
prompt.)
White space (i.e., spaces, tabs and newlines) may be
used freely in <Acronym>SQL</Acronym> queries. Single-line comments are denoted by
<Title>Destroying a Database</Title>
<Para>
- If you are the database administrator for the database
+ If you are the owner of 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
+ 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.
+ this should only be done with a great deal of forethought.
</Para>
</Sect1>
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/abort.sgml,v 1.5 2000/01/29 16:58:27 petere Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/abort.sgml,v 1.6 2000/03/26 18:32:27 petere Exp $
Postgres documentation
-->
<varlistentry>
<term><computeroutput>
NOTICE: ROLLBACK: no transaction in progress
-ROLLBACK
</computeroutput></term>
<listitem>
<para>
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_database.sgml,v 1.11 1999/12/12 05:15:09 momjian Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_database.sgml,v 1.12 2000/03/26 18:32:27 petere Exp $
Postgres documentation
-->
<computeroutput>Creating Postgres database system directory /home/olly/private_db/base</computeroutput>
<prompt>$</prompt> <userinput>psql olly</userinput>
-<computeroutput>Welcome to psql, the PostgreSQL interactive terminal.
-(Please type \copyright to see the distribution terms of PostgreSQL.)
+<computeroutput>
+Welcome to psql, the PostgreSQL interactive terminal.
-Type \h for help with SQL commands,
- \? for help on internal slash commands,
- \q to quit,
- \g or terminate with semicolon to execute query.
+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
+
<prompt>olly=></prompt></computeroutput> <userinput>CREATE DATABASE elsewhere WITH LOCATION = '/home/olly/private_db';</userinput>
<computeroutput>CREATE DATABASE</computeroutput>
</programlisting>
</title>
<para>
There is no <command>CREATE DATABASE</command> statement in SQL92.
- The equivalent command in standard SQL is <command>CREATE SCHEMA</command>.
+ Databases are equivalent to catalogs whose creation is implementation-defined.
</para>
</refsect2>
</refsect1>
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_function.sgml,v 1.11 1999/10/02 21:27:49 tgl Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_function.sgml,v 1.12 2000/03/26 18:32:27 petere Exp $
Postgres documentation
-->
<para>
To create a simple SQL function:
- <programlisting>
+<programlisting>
CREATE FUNCTION one() RETURNS int4
AS 'SELECT 1 AS RESULT'
LANGUAGE 'sql';
SELECT one() AS answer;
- <computeroutput>
- answer
- ------
- 1
- </computeroutput>
- </programlisting>
+<computeroutput>
+ answer
+--------
+ 1
+</computeroutput>
+</programlisting>
</para>
<para>
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_language.sgml,v 1.8 1999/07/22 15:09:07 thomas Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_language.sgml,v 1.9 2000/03/26 18:32:27 petere Exp $
Postgres documentation
-->
<para>
Refer to the table <filename>pg_language</filename>
for further information:
- <programlisting>
- <computeroutput>
-Table = pg_language
-+--------------------------+--------------------------+-------+
-| Field | Type | Length|
-+--------------------------+--------------------------+-------+
-| lanname | name | 32 |
-| lancompiler | text | var |
-+--------------------------+--------------------------+-------+
+<programlisting>
+<computeroutput>
+ Table "pg_language"
+ Attribute | Type | Modifier
+---------------+---------+----------
+ lanname | name |
+ lanispl | boolean |
+ lanpltrusted | boolean |
+ lanplcallfoid | oid |
+ lancompiler | text |
-lanname |lancompiler
---------+--------------
-internal|n/a
-lisp |/usr/ucb/liszt
-C |/bin/cc
-sql |postgres
- </computeroutput>
- </programlisting>
+ lanname | lanispl | lanpltrusted | lanplcallfoid | lancompiler
+----------+---------+--------------+---------------+-------------
+ internal | f | f | 0 | n/a
+ C | f | f | 0 | /bin/cc
+ sql | f | f | 0 | postgres
+</computeroutput>
+</programlisting>
</para>
<para>
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_view.sgml,v 1.7 1999/07/22 15:09:08 thomas Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_view.sgml,v 1.8 2000/03/26 18:32:27 petere Exp $
Postgres documentation
-->
SELECT * FROM kinds;
-code |title |did| date_prod|kind |len
------+-------------------------+---+----------+----------+------
-UA502|Bananas |105|1971-07-13|Comedy | 01:22
-C_701|There's a Girl in my Soup|107|1970-06-11|Comedy | 01:36
+ code | title | did | date_prod | kind | len
+-------+---------------------------+-----+------------+--------+-------
+ UA502 | Bananas | 105 | 1971-07-13 | Comedy | 01:22
+ C_701 | There's a Girl in my Soup | 107 | 1970-06-11 | Comedy | 01:36
+(2 rows)
</programlisting>
</para>
</refsect1>
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/delete.sgml,v 1.9 1999/10/04 04:37:46 momjian Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/delete.sgml,v 1.10 2000/03/26 18:32:27 petere Exp $
Postgres documentation
-->
</title>
<para>
Remove all films but musicals:
- <programlisting>
+<programlisting>
DELETE FROM films WHERE kind <> 'Musical';
SELECT * FROM films;
- <computeroutput>
-code |title |did| date_prod|kind |len
------+-------------------------+---+----------+----------+------
-UA501|West Side Story |105|1961-01-03|Musical | 02:32
-TC901|The King and I |109|1956-08-11|Musical | 02:13
-WD101|Bed Knobs and Broomsticks|111| |Musical | 01:57
+<computeroutput>
+ code | title | did | date_prod | kind | len
+-------+---------------------------+-----+------------+---------+-------
+ UA501 | West Side Story | 105 | 1961-01-03 | Musical | 02:32
+ TC901 | The King and I | 109 | 1956-08-11 | Musical | 02:13
+ WD101 | Bed Knobs and Broomsticks | 111 | | Musical | 01:57
(3 rows)
- </computeroutput>
- </programlisting>
+</computeroutput>
+</programlisting>
</para>
<para>
Clear the table <literal>films</literal>:
- <programlisting>
+<programlisting>
DELETE FROM films;
SELECT * FROM films;
- <computeroutput>
-code|title|did|date_prod|kind|len
-----+-----+---+---------+----+---
+<computeroutput>
+ code | title | did | date_prod | kind | len
+------+-------+-----+-----------+------+-----
(0 rows)
- </computeroutput>
- </programlisting>
+</computeroutput>
+</programlisting>
</para>
</refsect1>
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/fetch.sgml,v 1.7 1999/07/22 15:09:12 thomas Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/fetch.sgml,v 1.8 2000/03/26 18:32:27 petere Exp $
Postgres documentation
-->
<para>
The following examples traverses a table using a cursor.
- <programlisting>
- --set up and use a cursor:
- --
- BEGIN WORK;
- DECLARE liahona CURSOR
- FOR SELECT * FROM films;
-
- --Fetch first 5 rows in the cursor liahona:
- --
- FETCH FORWARD 5 IN liahona;
-
- <computeroutput>
- code |title |did| date_prod|kind |len
- -----+-----------------------+---+----------+----------+------
- BL101|The Third Man |101|1949-12-23|Drama | 01:44
- BL102|The African Queen |101|1951-08-11|Romantic | 01:43
- JL201|Une Femme est une Femme|102|1961-03-12|Romantic | 01:25
- P_301|Vertigo |103|1958-11-14|Action | 02:08
- P_302|Becket |103|1964-02-03|Drama | 02:28
- </computeroutput>
-
- --Fetch previous row:
- --
- FETCH BACKWARD 1 IN liahona;
-
- <computeroutput>
- code |title |did| date_prod|kind |len
- -----+-----------------------+---+----------+----------+------
- P_301|Vertigo |103|1958-11-14|Action | 02:08
- </computeroutput>
-
- -- close the cursor and commit work:
- --
- CLOSE liahona;
- COMMIT WORK;
- </programlisting>
+<programlisting>
+-- set up and use a cursor:
+
+BEGIN WORK;
+DECLARE liahona CURSOR FOR SELECT * FROM films;
+
+-- Fetch first 5 rows in the cursor liahona:
+FETCH FORWARD 5 IN liahona;
+
+<computeroutput>
+ code | title | did | date_prod | kind | len
+-------+-------------------------+-----+------------+----------+-------
+ BL101 | The Third Man | 101 | 1949-12-23 | Drama | 01:44
+ BL102 | The African Queen | 101 | 1951-08-11 | Romantic | 01:43
+ JL201 | Une Femme est une Femme | 102 | 1961-03-12 | Romantic | 01:25
+ P_301 | Vertigo | 103 | 1958-11-14 | Action | 02:08
+ P_302 | Becket | 103 | 1964-02-03 | Drama | 02:28
+</computeroutput>
+
+-- Fetch previous row:
+FETCH BACKWARD 1 IN liahona;
+
+<computeroutput>
+ code | title | did | date_prod | kind | len
+-------+---------+-----+------------+--------+-------
+ P_301 | Vertigo | 103 | 1958-11-14 | Action | 02:08
+</computeroutput>
+
+-- close the cursor and commit work:
+
+CLOSE liahona;
+COMMIT WORK;
+</programlisting>
</para>
</refsect1>
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/Attic/initlocation.sgml,v 1.5 2000/01/18 00:03:34 petere Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/Attic/initlocation.sgml,v 1.6 2000/03/26 18:32:27 petere Exp $
Postgres documentation
-->
<programlisting>
$ export PGDATA2=/opt/postgres/data
$ initlocation PGDATA2
-$ createdb 'testdb' -D 'PGDATA2/testdb'
+$ createdb 'testdb' -D 'PGDATA2'
</programlisting>
</para>
Alternatively, if you allow absolute paths you could write:
<programlisting>
$ initlocation /opt/postgres/data
-$ createdb 'testdb' -D '/opt/postgres/data/testdb'
+$ createdb testdb -D '/opt/postgres/data/testdb'
</programlisting>
</para>
</refsect1>
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/listen.sgml,v 1.7 1999/07/22 15:09:12 thomas Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/listen.sgml,v 1.8 2000/03/26 18:32:27 petere Exp $
Postgres documentation
-->
</title>
<para>
Configure and execute a listen/notify sequence from <application>psql</application>:
- <programlisting>
+<programlisting>
LISTEN virtual;
NOTIFY virtual;
-ASYNC NOTIFY of 'virtual' from backend pid '11239' received
- </programlisting>
+Asynchronous NOTIFY 'virtual' from backend with pid '8448' received.
+</programlisting>
</para>
</refsect1>
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/move.sgml,v 1.6 1999/07/22 15:09:13 thomas Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/move.sgml,v 1.7 2000/03/26 18:32:27 petere Exp $
Postgres documentation
-->
<para>
Set up and use a cursor:
- <programlisting>
+<programlisting>
BEGIN WORK;
DECLARE liahona CURSOR FOR SELECT * FROM films;
---Skip first 5 rows:
+-- Skip first 5 rows:
MOVE FORWARD 5 IN liahona;
<computeroutput>
MOVE
</computeroutput>
---Fetch 6th row in the cursor liahona:
+-- Fetch 6th row in the cursor liahona:
FETCH 1 IN liahona;
<computeroutput>
FETCH
- code |title |did| date_prod|kind |len
- -----+------+---+----------+----------+------
- P_303|48 Hrs|103|1982-10-22|Action | 01:37
- (1 row)
+ code | title | did | date_prod | kind | len
+-------+--------+-----+-----------+--------+-------
+ P_303 | 48 Hrs | 103 | 1982-10-22| Action | 01:37
+(1 row)
</computeroutput>
-- close the cursor liahona and commit work:
CLOSE liahona;
COMMIT WORK;
- </programlisting>
+</programlisting>
</para>
</refsect1>
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/notify.sgml,v 1.10 1999/07/22 15:09:13 thomas Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/notify.sgml,v 1.11 2000/03/26 18:32:27 petere Exp $
Postgres documentation
-->
Configure and execute a listen/notify sequence from
<application>psql</application>:
- <programlisting>
-LISTEN virtual;
-NOTIFY virtual;
-ASYNC NOTIFY of 'virtual' from backend pid '11239' received
- </programlisting>
+<programlisting>
+=> LISTEN virtual;
+=> NOTIFY virtual;
+Asynchronous NOTIFY 'virtual' from backend with pid '8448' received.
+</programlisting>
</para>
</refsect1>
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/select.sgml,v 1.26 2000/03/15 23:31:19 tgl Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/select.sgml,v 1.27 2000/03/26 18:32:27 petere Exp $
Postgres documentation
-->
FROM distributors d, films f
WHERE f.did = d.did
-title |did|name | date_prod|kind
--------------------------+---+----------------+----------+----------
-The Third Man |101|British Lion |1949-12-23|Drama
-The African Queen |101|British Lion |1951-08-11|Romantic
-Une Femme est une Femme |102|Jean Luc Godard |1961-03-12|Romantic
-Vertigo |103|Paramount |1958-11-14|Action
-Becket |103|Paramount |1964-02-03|Drama
-48 Hrs |103|Paramount |1982-10-22|Action
-War and Peace |104|Mosfilm |1967-02-12|Drama
-West Side Story |105|United Artists |1961-01-03|Musical
-Bananas |105|United Artists |1971-07-13|Comedy
-Yojimbo |106|Toho |1961-06-16|Drama
-There's a Girl in my Soup|107|Columbia |1970-06-11|Comedy
-Taxi Driver |107|Columbia |1975-05-15|Action
-Absence of Malice |107|Columbia |1981-11-15|Action
-Storia di una donna |108|Westward |1970-08-15|Romantic
-The King and I |109|20th Century Fox|1956-08-11|Musical
-Das Boot |110|Bavaria Atelier |1981-11-11|Drama
-Bed Knobs and Broomsticks|111|Walt Disney | |Musical
- </programlisting>
+ title | did | name | date_prod | kind
+---------------------------+-----+------------------+------------+----------
+ The Third Man | 101 | British Lion | 1949-12-23 | Drama
+ The African Queen | 101 | British Lion | 1951-08-11 | Romantic
+ Une Femme est une Femme | 102 | Jean Luc Godard | 1961-03-12 | Romantic
+ Vertigo | 103 | Paramount | 1958-11-14 | Action
+ Becket | 103 | Paramount | 1964-02-03 | Drama
+ 48 Hrs | 103 | Paramount | 1982-10-22 | Action
+ War and Peace | 104 | Mosfilm | 1967-02-12 | Drama
+ West Side Story | 105 | United Artists | 1961-01-03 | Musical
+ Bananas | 105 | United Artists | 1971-07-13 | Comedy
+ Yojimbo | 106 | Toho | 1961-06-16 | Drama
+ There's a Girl in my Soup | 107 | Columbia | 1970-06-11 | Comedy
+ Taxi Driver | 107 | Columbia | 1975-05-15 | Action
+ Absence of Malice | 107 | Columbia | 1981-11-15 | Action
+ Storia di una donna | 108 | Westward | 1970-08-15 | Romantic
+ The King and I | 109 | 20th Century Fox | 1956-08-11 | Musical
+ Das Boot | 110 | Bavaria Atelier | 1981-11-11 | Drama
+ Bed Knobs and Broomsticks | 111 | Walt Disney | | Musical
+(17 rows)
+</programlisting>
</para>
<para>
To sum the column <literal>len</literal> of all films and group
the results by <literal>kind</literal>:
- <programlisting>
+<programlisting>
SELECT kind, SUM(len) AS total FROM films GROUP BY kind;
- kind |total
- ----------+------
- Action | 07:34
- Comedy | 02:58
- Drama | 14:28
- Musical | 06:42
- Romantic | 04:38
- </programlisting>
+ kind | total
+----------+-------
+ Action | 07:34
+ Comedy | 02:58
+ Drama | 14:28
+ Musical | 06:42
+ Romantic | 04:38
+(5 rows)
+</programlisting>
</para>
<para>
the results by <literal>kind</literal> and show those group totals
that are less than 5 hours:
- <programlisting>
+<programlisting>
SELECT kind, SUM(len) AS total
FROM films
GROUP BY kind
HAVING SUM(len) < INTERVAL '5 hour';
- kind |total
- ----------+------
- Comedy | 02:58
- Romantic | 04:38
- </programlisting>
+ kind | total
+----------+-------
+ Comedy | 02:58
+ Romantic | 04:38
+(2 rows)
+</programlisting>
</para>
<para>
SELECT * FROM distributors ORDER BY name;
SELECT * FROM distributors ORDER BY 2;
- did|name
- ---+----------------
- 109|20th Century Fox
- 110|Bavaria Atelier
- 101|British Lion
- 107|Columbia
- 102|Jean Luc Godard
- 113|Luso films
- 104|Mosfilm
- 103|Paramount
- 106|Toho
- 105|United Artists
- 111|Walt Disney
- 112|Warner Bros.
- 108|Westward
- </programlisting>
+ did | name
+-----+------------------
+ 109 | 20th Century Fox
+ 110 | Bavaria Atelier
+ 101 | British Lion
+ 107 | Columbia
+ 102 | Jean Luc Godard
+ 113 | Luso films
+ 104 | Mosfilm
+ 103 | Paramount
+ 106 | Toho
+ 105 | United Artists
+ 111 | Walt Disney
+ 112 | Warner Bros.
+ 108 | Westward
+(13 rows)
+</programlisting>
</para>
<para>
with letter W in each table. Only distinct rows are wanted, so the
ALL keyword is omitted:
- <programlisting>
- -- distributors: actors:
- -- did|name id|name
- -- ---+------------ --+--------------
- -- 108|Westward 1|Woody Allen
- -- 111|Walt Disney 2|Warren Beatty
- -- 112|Warner Bros. 3|Walter Matthau
- -- ... ...
+<programlisting>
+distributors: actors:
+ did | name id | name
+-----+-------------- ----+----------------
+ 108 | Westward 1 | Woody Allen
+ 111 | Walt Disney 2 | Warren Beatty
+ 112 | Warner Bros. 3 | Walter Matthau
+ ... ...
SELECT distributors.name
FROM distributors
FROM actors
WHERE actors.name LIKE 'W%'
-name
---------------
-Walt Disney
-Walter Matthau
-Warner Bros.
-Warren Beatty
-Westward
-Woody Allen
- </programlisting>
+ name
+----------------
+ Walt Disney
+ Walter Matthau
+ Warner Bros.
+ Warren Beatty
+ Westward
+ Woody Allen
+</programlisting>
</para>
</refsect1>
<programlisting>
SELECT distributors.* WHERE name = 'Westwood';
- did|name
- ---+----------------
- 108|Westward
+ did | name
+-----+----------
+ 108 | Westward
</programlisting>
</para>
</refsect2>
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/set.sgml,v 1.32 2000/03/17 05:29:03 tgl Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/set.sgml,v 1.33 2000/03/26 18:32:27 petere Exp $
Postgres documentation
-->
Set the timezone for Berkeley, California:
- <programlisting>
+<programlisting>
SET TIME ZONE 'PST8PDT';
SELECT CURRENT_TIMESTAMP AS today;
- today
- ----------------------
- 1998-03-31 07:41:21-08
- </programlisting>
+ today
+------------------------
+ 1998-03-31 07:41:21-08
+</programlisting>
- Set the timezone for Italy:
+Set the timezone for Italy:
- <programlisting>
+<programlisting>
SET TIME ZONE 'Europe/Rome';
SELECT CURRENT_TIMESTAMP AS today;
- today
- ----------------------
- 1998-03-31 17:41:31+02
- </programlisting>
+ today
+------------------------
+ 1998-03-31 17:41:31+02
+</programlisting>
</para>
</refsect1>
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/unlisten.sgml,v 1.8 1999/07/22 15:09:15 thomas Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/unlisten.sgml,v 1.9 2000/03/26 18:32:27 petere Exp $
Postgres documentation
-->
<para>
To subscribe to an existing registration:
- <programlisting>
+<programlisting>
postgres=> LISTEN virtual;
LISTEN
postgres=> NOTIFY virtual;
NOTIFY
-ASYNC NOTIFY of 'virtual' from backend pid '12317' received
- </programlisting>
+Asynchronous NOTIFY 'virtual' from backend with pid '8448' received
+</programlisting>
</para>
<para>
Once UNLISTEN has been executed, further NOTIFY commands will be
ignored:
- <programlisting>
+<programlisting>
postgres=> UNLISTEN virtual;
UNLISTEN
postgres=> NOTIFY virtual;
NOTIFY
-- notice no NOTIFY event is received
- </programlisting>
+</programlisting>
</para>
</refsect1>
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/update.sgml,v 1.7 2000/01/29 16:58:27 petere Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/update.sgml,v 1.8 2000/03/26 18:32:27 petere Exp $
Postgres documentation
-->
<para>
Change word "Drama" with "Dramatic" on column kind:
- <programlisting>
-UPDATE films
- SET kind = 'Dramatic'
- WHERE kind = 'Drama';
+<programlisting>
+UPDATE films SET kind = 'Dramatic' WHERE kind = 'Drama';
SELECT * FROM films WHERE kind = 'Dramatic' OR kind = 'Drama';
- code |title |did| date_prod|kind |len
- -----+-------------+---+----------+----------+------
- BL101|The Third Man|101|1949-12-23|Dramatic | 01:44
- P_302|Becket |103|1964-02-03|Dramatic | 02:28
- M_401|War and Peace|104|1967-02-12|Dramatic | 05:57
- T_601|Yojimbo |106|1961-06-16|Dramatic | 01:50
- DA101|Das Boot |110|1981-11-11|Dramatic | 02:29
- </programlisting>
+ code | title | did | date_prod | kind | len
+-------+---------------+-----+------------+----------+-------
+ BL101 | The Third Man | 101 | 1949-12-23 | Dramatic | 01:44
+ P_302 | Becket | 103 | 1964-02-03 | Dramatic | 02:28
+ M_401 | War and Peace | 104 | 1967-02-12 | Dramatic | 05:57
+ T_601 | Yojimbo | 106 | 1961-06-16 | Dramatic | 01:50
+ DA101 | Das Boot | 110 | 1981-11-11 | Dramatic | 02:29
+</programlisting>
</para>
</refsect1>
<programlisting>
tgl=> SELECT text 'Origin' AS "Label", point '(0,0)' AS "Value";
-Label |Value
-------+-----
-Origin|(0,0)
+ Label | Value
+--------+-------
+ Origin | (0,0)
(1 row)
</programlisting>
of this query expression:
<programlisting>
tgl=> select 2 ^ 3 AS "Exp";
-Exp
----
- 8
+ Exp
+-----
+ 8
(1 row)
</programlisting>
<programlisting>
tgl=> select float8(2) ^ float8(3) AS "Exp";
-Exp
----
- 8
+ Exp
+-----
+ 8
(1 row)
</programlisting>
<programlisting>
tgl=> select 2.0 ^ 3.0 AS "Exp";
-Exp
----
- 8
+ Exp
+-----
+ 8
(1 row)
</programlisting>
One unspecified argument:
<programlisting>
tgl=> SELECT text 'abc' || 'def' AS "Text and Unknown";
-Text and Unknown
-----------------
-abcdef
+ Text and Unknown
+------------------
+ abcdef
(1 row)
</programlisting>
</para>
Concatenation on unspecified types:
<programlisting>
tgl=> SELECT 'abc' || 'def' AS "Unspecified";
-Unspecified
------------
-abcdef
+ Unspecified
+-------------
+ abcdef
(1 row)
</programlisting>
</para>
<programlisting>
tgl=> select (4.3 !);
-?column?
---------
- 24
+ ?column?
+----------
+ 24
(1 row)
</programlisting>
<programlisting>
tgl=> select int4fac(int2 '4');
-int4fac
--------
- 24
+ int4fac
+---------
+ 24
(1 row)
</programlisting>
and is actually transformed by the parser to
<programlisting>
tgl=> select int4fac(int4(int2 '4'));
-int4fac
--------
- 24
+ int4fac
+---------
+ 24
(1 row)
</programlisting>
</para>
directly with the only candidate function type:
<programlisting>
tgl=> select substr('1234', 3);
-substr
-------
- 34
+ substr
+--------
+ 34
(1 row)
</programlisting>
</para>
if it comes from a table, then the parser will try to coerce it to become <type>text</type>:
<programlisting>
tgl=> select substr(varchar '1234', 3);
-substr
-------
- 34
+ substr
+--------
+ 34
(1 row)
</programlisting>
which is transformed by the parser to become
<programlisting>
tgl=> select substr(text(varchar '1234'), 3);
-substr
-------
- 34
+ substr
+--------
+ 34
(1 row)
</programlisting>
</para>
try to convert that to <type>text</type>:
<programlisting>
tgl=> select substr(1234, 3);
-substr
-------
- 34
+ substr
+--------
+ 34
(1 row)
</programlisting>
actually executes as
<programlisting>
tgl=> select substr(text(1234), 3);
-substr
-------
- 34
+ substr
+--------
+ 34
(1 row)
</programlisting>
</para>
CREATE
tgl=> INSERT INTO vv SELECT 'abc' || 'def';
INSERT 392905 1
-tgl=> select * from vv;
-v
-----
-abcd
-(1 row)
+tgl=> SELECT * FROM vv;
+ v
+------
+ abcd
+(1 row)
</programlisting>
</para>
</sect3>
<para>
<programlisting>
tgl=> SELECT text 'a' AS "Text" UNION SELECT 'b';
-Text
-----
-a
-b
+ Text
+------
+ a
+ b
(2 rows)
</programlisting>
</para>
<para>
<programlisting>
-tgl=> SELECT 1.2 AS Float8 UNION SELECT 1;
-Float8
-------
- 1
- 1.2
+tgl=> SELECT 1.2 AS "Float8" UNION SELECT 1;
+ Float8
+--------
+ 1
+ 1.2
(2 rows)
</programlisting>
</para>
tgl=> SELECT 1 AS "All integers"
tgl-> UNION SELECT '2.2'::float4
tgl-> UNION SELECT 3.3;
-All integers
-------------
- 1
- 2
- 3
+ All integers
+--------------
+ 1
+ 2
+ 3
(3 rows)
</programlisting>
</para>
INSERT 0 3
tgl=> SELECT f AS "Floating point" from ff;
Floating point
-----------------
- 1
-2.20000004768372
- 3.3
+------------------
+ 1
+ 2.20000004768372
+ 3.3
(3 rows)
</programlisting>
</para>
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.51 2000/03/15 06:50:51 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.52 2000/03/26 18:32:28 petere Exp $
*
*-------------------------------------------------------------------------
*/
{
char buf[2 * MAXPGPATH + 100];
char *loc;
+ char locbuf[512];
int4 user_id;
bool use_super, use_createdb;
Relation pg_database_rel;
char new_record_nulls[Natts_pg_database] = { ' ', ' ', ' ', ' ' };
if (!get_user_info(GetPgUserName(), &user_id, &use_super, &use_createdb))
- elog(ERROR, "Current user name is invalid");
+ elog(ERROR, "current user name is invalid");
if (!use_createdb && !use_super)
- elog(ERROR, "CREATE DATABASE: Permission denied");
+ elog(ERROR, "CREATE DATABASE: permission denied");
if (get_db_info(dbname, NULL, NULL, NULL))
- elog(ERROR, "CREATE DATABASE: Database \"%s\" already exists", dbname);
+ elog(ERROR, "CREATE DATABASE: database \"%s\" already exists", dbname);
/* don't call this in a transaction block */
if (IsTransactionBlock())
- elog(ERROR, "CREATE DATABASE: May not be called in a transaction block");
+ elog(ERROR, "CREATE DATABASE: may not be called in a transaction block");
/* Generate directory name for the new database */
- if (dbpath == NULL)
- dbpath = dbname;
+ if (dbpath == NULL || strcmp(dbpath, dbname)==0)
+ strcpy(locbuf, dbname);
+ else
+ snprintf(locbuf, sizeof(locbuf), "%s/%s", dbpath, dbname);
- loc = ExpandDatabasePath(dbpath);
+ loc = ExpandDatabasePath(locbuf);
if (loc == NULL)
elog(ERROR,
pg_database_dsc = RelationGetDescr(pg_database_rel);
/* Form tuple */
- new_record[Anum_pg_database_datname-1] = NameGetDatum(dbname);
+ new_record[Anum_pg_database_datname-1] = NameGetDatum(namein(dbname));
new_record[Anum_pg_database_datdba-1] = Int32GetDatum(user_id);
new_record[Anum_pg_database_encoding-1] = Int32GetDatum(encoding);
- new_record[Anum_pg_database_datpath-1] = PointerGetDatum(textin((char *)dbpath));
+ new_record[Anum_pg_database_datpath-1] = PointerGetDatum(textin(locbuf));
tuple = heap_formtuple(pg_database_dsc, new_record, new_record_nulls);
/* Copy the template database to the new location */
if (mkdir(loc, S_IRWXU) != 0) {
- elog(ERROR, "CREATE DATABASE: Unable to create database directory '%s': %s", loc, strerror(errno));
+ elog(ERROR, "CREATE DATABASE: unable to create database directory '%s': %s", loc, strerror(errno));
}
snprintf(buf, sizeof(buf), "cp %s%cbase%ctemplate1%c* '%s'",
snprintf(buf, sizeof(buf), "rm -rf '%s'", loc);
ret = system(buf);
if (ret == 0)
- elog(ERROR, "CREATE DATABASE: Could not initialize database directory");
+ elog(ERROR, "CREATE DATABASE: could not initialize database directory");
else
elog(ERROR, "CREATE DATABASE: Could not initialize database directory. Delete failed as well");
}
#
#
# IDENTIFICATION
-# $Header: /cvsroot/pgsql/src/bin/initlocation/Attic/initlocation.sh,v 1.6 2000/03/25 19:01:48 tgl Exp $
+# $Header: /cvsroot/pgsql/src/bin/initlocation/Attic/initlocation.sh,v 1.7 2000/03/26 18:32:30 petere Exp $
#
#-------------------------------------------------------------------------
# path, which the backend won't allow by default.
if [ "$haveenv" = "t" ]; then
echo "You can now create a database using"
- echo " CREATE DATABASE <name> WITH LOCATION = '$Location/<name>'"
+ echo " CREATE DATABASE <name> WITH LOCATION = '$Location'"
echo "in SQL, or"
- echo " createdb <name> -D '$Location/<name>'"
+ echo " createdb <name> -D '$Location'"
echo "from the shell."
fi
echo