small note on postgresql

postgresql tutorial 2002

これから tutorial の 世界に 往きます

前準備

移動します そうして 現状を 認識すると

$ cd /usr/local/src/postgresql/postgresql-8.1.1/src/tutorial/
$ psql -l
        List of databases
   Name    |  Owner   | Encoding 
-----------+----------+----------
 postgres  | postgres | EUC_JP
 template0 | postgres | EUC_JP
 template1 | postgres | EUC_JP
(3 rows)

tutorial に 使用する新しい データーベースを 作成します。

$ createdb
CREATE DATABASE

データーベース の 名前を書いてあげないと ユーザーの 名前で作成されま す。この場合 ユーザーの名前は ”nyanco”です。

$ psql -l
        List of databases
   Name    |  Owner   | Encoding 
-----------+----------+----------
 nyanco    | nyanco   | EUC_JP
 postgres  | postgres | EUC_JP
 template0 | postgres | EUC_JP
 template1 | postgres | EUC_JP
(4 rows)

その前に これから使う ファイルを 見てみましょう まずどんなものか?

# file basics.s*
basics.source: ASCII English text
basics.sql:    ASCII English text
# ls -l basics.s*
-rw-r--r--    1 mm       users        5743 Nov 30  2003 basics.source
-rw-r--r--    1 mm       users        5743 Dec 22 21:01 basics.sql
# diff -s basics.source basics.sql 
Files basics.source and basics.sql are identical

このファイルを使用して tutorial の 世界に 往くのですが 内容の 抜粋を 見てみましょう。

-- basics.sql-
--    Tutorial on the basics (table creation and data manipulation)
--
--
-- Copyright (c) 1994, Andrew Yu, University of California
--
-- $PostgreSQL: pgsql/src/tutorial/basics.source,v 1.5 2003/11/29 22:41:33 pgsql
 Exp $
-- Creating a New Table:
--      A CREATE TABLE is used to create base tables.  PostgreSQL has
--      its own set of built-in types.  (Note that SQL is case-
--      insensitive.)
-----------------------------

CREATE TABLE weather (
        city            varchar(80),
        temp_lo         int,            -- low temperature
        temp_hi         int,            -- high temperature
        prcp            real,           -- precipitation
        date            date
);

CREATE TABLE cities (
        name            varchar(80),
        location        point
);

どうも 最初の "--" で 始まるのは コメントの ようです。 ほたら 取り掛 かります ”-s ” というのは”一時停止する”ということの ようです。

http://www.postgresql.jp/document/pg810doc/html/tutorial-sql.html
\iは、指定したファイルからコマンドを読み込みます。
-sオプションによって、それぞれの文をサーバに送る前に一時停止する、シン グルステップモードとなります。 本節で使用するコマンドはbasics.sourceファイル内にあります。

てなことの 様です。データーベースの 名前を指定せずに立ち上げると ユー ザーの 名前の データーベースを 取り扱う事になります。

$ psql -s
Welcome to psql 8.1.1, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

nyanco=> 
nyanco=> \i basics.sql /*  へい ここから 始まり はじまり です。  */
***(Single step mode: verify command)*******************************************
/*  この部分は 表示されません ここから つまり 入力ファイル ”basics.sql” に有る物です  */
-----------------------------
-- Creating a New Table:
--      A CREATE TABLE is used to create base tables.  PostgreSQL has
--      its own set of built-in types.  (Note that SQL is case-
--      insensitive.)
-----------------------------
/*  この部分は 表示されません ここまで、新しくテーブルを 作成しよう ということです。  */
CREATE TABLE weather (
        city            varchar(80),
        temp_lo         int,
        temp_hi         int,
        prcp            real,
        date            date
);
***(press return to proceed or enter x and return to cancel)********************
/*   わかり難くいえば ”weather”という名前の ”TABLE” を 作成しよう
項目 city というのは 文字 80 個 の 領域
項目 temp_lo というのは 整数 の 領域
項目 temp_hi というのは 整数 の 領域
項目 prcp  というのは 実数 の 領域 
項目 date というのは 日付け 型 の 領域
 を 表します  取り敢えずは この様な 感じで良いでしょう。
都市の名前と 最低最高温度 降水量 と 其の日付け を 内容とする  TABLE
を  ”weather” という名前で もって 作成すると いうことです。当然此処の
データーは まだ 記入は していない 状態です  */

CREATE TABLE

/*  ”TABLE”が 出来ましたと いってます。  */

***(Single step mode: verify command)*******************************************

CREATE TABLE cities (
        name            varchar(80),
        location        point
);
***(press return to proceed or enter x and return to cancel)********************
/*  このような 状態で 待機します つまり 次は ” cities ”
 という ”TABLE ”を 作成し 其の内容は 云々 ということです   */

CREATE TABLE
***(Single step mode: verify command)*******************************************
INSERT INTO weather 
    VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27');
***(press return to proceed or enter x and return to cancel)********************
/*   ここで 再度 小休止 (待機)に なります。ENTER
キーにて 進みます 表現は ”press return to proceed” ということです
キーワード ”INSERT”です 

INSERT :データーの 挿入 
INTO : 何処に 
weather : ”weather”という ”TABLE”に
 VALUES : 内容は 
CREATE TABLE weather (
        city            varchar(80),
        temp_lo         int,
        temp_hi         int,
        prcp            real,
        date            date
);
に 対応させて 
'San Francisco',    46,      50,    0.25,    '1994-11-27' を 挿入
 都市            最低温度 最高温度 降水量      日付け
  */
INSERT 0 1
***(Single step mode: verify command)*******************************************
INSERT INTO cities 
    VALUES ('San Francisco', '(-194.0, 53.0)');
***(press return to proceed or enter x and return to cancel)********************
/*   こんどは 別の ”cities”という ”TABLE”に 
データーを 挿入 します 同様に 
'San Francisco', '(-194.0, 53.0)'
 都市                 位置情報
この情報 は何を 表してるのだろう? 通常ならば
Coordinates 	
37°46′0″ N
122°26′0″ W
であろうが まあそれはさておき  */

INSERT 0 1
***(Single step mode: verify command)*******************************************
INSERT INTO weather (city, temp_lo, temp_hi, prcp, date)
    VALUES ('San Francisco', 43, 57, 0.0, '1994-11-29');
***(press return to proceed or enter x and return to cancel)********************
/*  日付け の 異なるデータ  */
INSERT 0 1
***(Single step mode: verify command)*******************************************
INSERT INTO weather (date, city, temp_hi, temp_lo)
    VALUES ('1994-11-29', 'Hayward', 54, 37);
***(press return to proceed or enter x and return to cancel)********************
/*  都市の名前が 異なる 対応の 順序に 注意   */
INSERT 0 1
***(Single step mode: verify command)*******************************************
SELECT * FROM weather;
***(press return to proceed or enter x and return to cancel)********************
     city      | temp_lo | temp_hi | prcp |    date    
---------------+---------+---------+------+------------
 San Francisco |      46 |      50 | 0.25 | 1994-11-27
 San Francisco |      43 |      57 |    0 | 1994-11-29
 Hayward       |      37 |      54 |      | 1994-11-29
(3 rows)
/*   ”weather””TABLE”の全てを 表示 
SELECT 選びます
 *     一切合財
FROM weather ここから:: ”weather” から 
  */
***(Single step mode: verify command)*******************************************
SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather;
***(press return to proceed or enter x and return to cancel)********************

     city      | temp_avg |    date    
---------------+----------+------------
 San Francisco |       48 | 1994-11-27
 San Francisco |       50 | 1994-11-29
 Hayward       |       45 | 1994-11-29
(3 rows)
/*  
FROM weather : ”weather” という ”TABLE”から 
city 都市 と
temp_avg という名前で (temp_hi+temp_lo)/2 最低と 最高の 平均を 表示
date 日時も 会わせて
という感じ
  */
***(Single step mode: verify command)*******************************************
SELECT *
    FROM weather
    WHERE city = 'San Francisco' 
        AND prcp > 0.0;
***(press return to proceed or enter x and return to cancel)********************
     city      | temp_lo | temp_hi | prcp |    date    
---------------+---------+---------+------+------------
 San Francisco |      46 |      50 | 0.25 | 1994-11-27
(1 row)
/*  
条件を 追記 
FROM weather : ”weather” という ”TABLE”から
WHERE city  都市の名前は ”San Francisco”
降雨の 量 0.0 以上(正確には 降水量 が 0.0 を 越えるというのが 良いでしょう以上は 含むが 今回は 含まない )
  */

***(Single step mode: verify command)*******************************************
SELECT DISTINCT city
    FROM weather
    ORDER BY city;
***(press return to proceed or enter x and return to cancel)********************

     city      
---------------
 Hayward
 San Francisco
(2 rows)

***(Single step mode: verify command)*******************************************
/*   まあ これは city に 関して 順番に 表示を 
DISTINCT とあるから ”TABLE” というのは ”weather”です が 重複は 表示
しないと いう事です  */
SELECT *
    FROM weather, cities
    WHERE city = name;
***(press return to proceed or enter x and return to cancel)********************

     city      | temp_lo | temp_hi | prcp |    date    |     name      | location  
---------------+---------+---------+------+------------+---------------+-----------
 San Francisco |      46 |      50 | 0.25 | 1994-11-27 | San Francisco | (-194,53)
 San Francisco |      43 |      57 |    0 | 1994-11-29 | San Francisco | (-194,53)
(2 rows)
/*   これは 何をしてるのでしょう?? 望んだ物でしょうか?  */
***(Single step mode: verify command)*******************************************
SELECT city, temp_lo, temp_hi, prcp, date, location
    FROM weather, cities
    WHERE city = name;
***(press return to proceed or enter x and return to cancel)********************
     city      | temp_lo | temp_hi | prcp |    date    | location  
---------------+---------+---------+------+------------+-----------
 San Francisco |      46 |      50 | 0.25 | 1994-11-27 | (-194,53)
 San Francisco |      43 |      57 |    0 | 1994-11-29 | (-194,53)
(2 rows)
/*   これも また 何をしてるのでしょう?? 望んだ物でしょうか?  */
***(Single step mode: verify command)*******************************************
SELECT weather.city, weather.temp_lo, weather.temp_hi, weather.prcp, weather.date, cities.location
    FROM weather, cities
    WHERE cities.name = weather.city;
***(press return to proceed or enter x and return to cancel)********************
     city      | temp_lo | temp_hi | prcp |    date    | location  
---------------+---------+---------+------+------------+-----------
 San Francisco |      46 |      50 | 0.25 | 1994-11-27 | (-194,53)
 San Francisco |      43 |      57 |    0 | 1994-11-29 | (-194,53)
(2 rows)
/*   おいおい? また 何をしてるのでしょう?? 望んだ物でしょうか?  */
***(Single step mode: verify command)*******************************************
SELECT *
    FROM weather JOIN cities ON (weather.city = cities.name);
***(press return to proceed or enter x and return to cancel)********************
     city      | temp_lo | temp_hi | prcp |    date    |     name      | location  
---------------+---------+---------+------+------------+---------------+-----------
 San Francisco |      46 |      50 | 0.25 | 1994-11-27 | San Francisco | (-194,53)
 San Francisco |      43 |      57 |    0 | 1994-11-29 | San Francisco | (-194,53)
(2 rows)
/*   ううううん これもまた、何をしてるのでしょう?? 望んだ物でしょうか?  */
***(Single step mode: verify command)*******************************************
SELECT *
    FROM weather LEFT OUTER JOIN cities ON (weather.city = cities.name);
***(press return to proceed or enter x and return to cancel)********************

     city      | temp_lo | temp_hi | prcp |    date    |     name      | location  
---------------+---------+---------+------+------------+---------------+-----------
 Hayward       |      37 |      54 |      | 1994-11-29 |               | 
 San Francisco |      46 |      50 | 0.25 | 1994-11-27 | San Francisco | (-194,53)
 San Francisco |      43 |      57 |    0 | 1994-11-29 | San Francisco | (-194,53)
(3 rows)
/*   何か抜けてるが いいのか?望んだ物でしょうか?  */
***(Single step mode: verify command)*******************************************
SELECT W1.city, W1.temp_lo, W1.temp_hi, 
       W2.city, W2.temp_lo, W2.temp_hi
FROM weather W1, weather W2
WHERE W1.temp_lo < W2.temp_lo 
   and W1.temp_hi > W2.temp_hi;
***(press return to proceed or enter x and return to cancel)********************



     city      | temp_lo | temp_hi |     city      | temp_lo | temp_hi 
---------------+---------+---------+---------------+---------+---------
 San Francisco |      43 |      57 | San Francisco |      46 |      50
 Hayward       |      37 |      54 | San Francisco |      46 |      50
(2 rows)
/*   これは これで 良いのかも?  */
***(Single step mode: verify command)*******************************************
SELECT max(temp_lo)
    FROM weather;
***(press return to proceed or enter x and return to cancel)********************


 max 
-----
  46
(1 row)
/*   そうですな!  */
***(Single step mode: verify command)*******************************************
SELECT city FROM weather
    WHERE temp_lo = (SELECT max(temp_lo) FROM weather);
***(press return to proceed or enter x and return to cancel)********************

     city      
---------------
 San Francisco
(1 row)
/*   なんとなく そうか!  */
***(Single step mode: verify command)*******************************************
SELECT city, max(temp_lo)
    FROM weather 
    GROUP BY city;
***(press return to proceed or enter x and return to cancel)********************


     city      | max 
---------------+-----
 Hayward       |  37
 San Francisco |  46
(2 rows)
/*   うううううんんーーー  */
***(Single step mode: verify command)*******************************************
SELECT city, max(temp_lo)
    FROM weather
    GROUP BY city
    HAVING max(temp_lo) < 40;
***(press return to proceed or enter x and return to cancel)********************
  city   | max 
---------+-----
 Hayward |  37
(1 row)
/*   再度見直す事  */
***(Single step mode: verify command)*******************************************
UPDATE weather
    SET temp_hi = temp_hi - 2,  temp_lo = temp_lo - 2
    WHERE date > '1994-11-28';
***(press return to proceed or enter x and return to cancel)********************

UPDATE 2

***(Single step mode: verify command)*******************************************
/*   そんでもって  */
SELECT * FROM weather;
***(press return to proceed or enter x and return to cancel)********************

     city      | temp_lo | temp_hi | prcp |    date    
---------------+---------+---------+------+------------
 San Francisco |      46 |      50 | 0.25 | 1994-11-27
 San Francisco |      41 |      55 |    0 | 1994-11-29
 Hayward       |      35 |      52 |      | 1994-11-29
(3 rows)
/*   そうなんですか?”1994-11-27”は関係なしに なるんですか  */
***(Single step mode: verify command)*******************************************
DELETE FROM weather WHERE city = 'Hayward';
***(press return to proceed or enter x and return to cancel)********************
DELETE 1
***(Single step mode: verify command)*******************************************
SELECT * FROM weather;
***(press return to proceed or enter x and return to cancel)********************

     city      | temp_lo | temp_hi | prcp |    date    
---------------+---------+---------+------+------------
 San Francisco |      46 |      50 | 0.25 | 1994-11-27
 San Francisco |      41 |      55 |    0 | 1994-11-29
(2 rows)
/*  DROP では 有りません 最初は 十分に 取り扱いませう   */
***(Single step mode: verify command)*******************************************
DELETE FROM weather;
***(press return to proceed or enter x and return to cancel)********************

DELETE 2
***(Single step mode: verify command)*******************************************
SELECT * FROM weather;
***(press return to proceed or enter x and return to cancel)********************

 city | temp_lo | temp_hi | prcp | date 
------+---------+---------+------+------
(0 rows)
/*  再度 DROP では 有りません 最初は 十分に 取り扱いませう   */
***(Single step mode: verify command)*******************************************
DROP TABLE weather, cities;
***(press return to proceed or enter x and return to cancel)********************

DROP TABLE
nyanco=> 
nyanco=> \q

もう一度 もう一度 もう一度 ですな 確認すると

$ psql -l
        List of databases
   Name    |  Owner   | Encoding 
-----------+----------+----------
 nyanco    | nyanco   | EUC_JP
 postgres  | postgres | EUC_JP
 template0 | postgres | EUC_JP
 template1 | postgres | EUC_JP
(4 rows)
$ 

おかたずけ

$ dropdb nyanco
DROP DATABASE
$ psql -l
        List of databases
   Name    |  Owner   | Encoding 
-----------+----------+----------
 postgres  | postgres | EUC_JP
 template0 | postgres | EUC_JP
 template1 | postgres | EUC_JP
(3 rows)

もう2、3回 練習した方が 良いようですな!!

にゃんたろう 拝!
2006年 4月29日 (土) 21:26:32 JST 作成


small note on postgresql

Copyright © 2004.-2007. nyantarou All Rights Reserved.