PostgreSQL http://www.ns.kogakuin.ac.jp/~ct13140/Prog.2009/ PostgreSQL-1 PostgreSQL • RDBMSの実装の1個. • オープンソースである. – C言語で記述され,ソースコードが公開されている. よって,中身を確認することができる.一般ユーザが 改造できる. 無料である. 現在,無料のRDBMSで最もユーザ数が多い. • 公式ページ http://www.postgresql.org/ 日本PostgreSQLユーザ会 http://www.postgresql.jp/ PostgreSQL-2 表とデータベースと データベースクラスタ • 複数の「列」が集まったものが「表」. – 実際は,列の数が0でもよい.空でもよい. • 複数の「表」が集まったものが「データベー ス」 – 実際は,表の数が0でもよい.空でもよい. • 複数のデータベースが集まったものが 「データベースクラスタ」 – 実際は,データベースの数が0でもよい. PostgreSQL-3 データベースクラスタ • データベースクラスタの中にデータベース を格納する. • これは,PostgreSQL管理者が管理する ものなので,本講義では扱わない. PostgreSQL-4 データベース • データベースの中に複数の表を格納でき る. • データベースには「データベース名」がある. • 各自,自分用のデータベースを作成しその 中に表を作成することとする. • データベース名は「学籍番号db」とする. – 例:学籍番号がct13140なら, 「ct13140db」 PostgreSQL-5 表 • 各自,自分用のデータベースの中に表を 自由に作成してよい. • 表には,「表名」がある. 「データベースクラスタ」の中に「データベース」が, 「データベース」の中に「表」がある. PostgreSQL-6 全体の流れ • PuTTYでgreen.ns.kogakuin.ac.jp にloginする. • 自分用データベースを作成する. – 通常,これは初回に1回だけ行う. • 自分用データベースに接続する. • 自分用データベースの中に表を作成する. • 表操作を行う. • データベースとの接続を切る. PostgreSQL-7 操作 • 以下,自分の学籍番号が「ct13140」であ ると仮定して話を進める. • 赤字がユーザの入力である. • 以下のような表を作るとする. id name email 0 fukuda [email protected] 1 abe [email protected] ↑ Integer型 ↑ Varchar(100)型 ↑ Varchar(100)型 PostgreSQL-8 復習 (SQL文) 0/6 • データベースの作成 – データベースにつないでいない状態で createdb データベース名 – これはPostgreSQL特有のコマンド. • データベースの削除 – データベースにつないでいない状態で dropdb データベース名 – データベース内の表が全て消えてしまう. – これはPostgreSQL特有のコマンド. PostgreSQL-9 復習 (SQL文) 1/6 • データベースに接続する. – データベースにつないでいない状態で psql データベース名 – これはPostgreSQL特有のコマンド. • データベースとの接続を切断する. – データベースにつないでいる状態で \q – これは,PostgreSQL特有のコマンド. PostgreSQL-10 復習 (SQL文) 2/6 • 存在する表の一覧を表示 – データベースにつないでいる状態で \d – これは,PostgreSQL特有のコマンド. PostgreSQL-11 復習 (SQL文) 3/6 • 表の作成 – データベースにつないでいる状態で CREATE TABLE...; – これはRDBMS一般のコマンド. • 表の削除 – データベースにつないでいる状態で DROP TABLE テーブル名; – 表内のデータが全て消えてしまう. – これはRDBMS一般のコマンド. PostgreSQL-12 復習 (SQL文) 4/6 • 表内のデータを得る – データベースにつないでいる状態で SELECT 列名 FROM 表名...; – これはRDBMS一般のコマンド. • 表にデータを挿入する. – データベースにつないでいる状態で INSERT INTO 表名 VALUES (...); – これはRDBMS一般のコマンド. PostgreSQL-13 復習 (SQL文) 5/6 • 表内のデータを変更する – データベースにつないでいる状態で UPDATE 表名 SET 列名=値 WHERE 条 件; – これはRDBMS一般のコマンド. • 表内の行を削除する – データベースにつないでいる状態で DELETE FROM 表名 WHERE 条件; – これはRDBMS一般のコマンド. PostgreSQL-14 復習 (型) • Integer型 整数型. • VARCHAR型 文字列型. 最大文字数を指定する. VARCHAR(100)なら,最大100文字. PostgreSQL-15 操作 0/22 • PuTTYでgreen.ns.kogakuin.ac.jpに loginする. – スタート → プログラム → Internet → PuTTY → PuTTY でPuTTYを起動 – 「セッション一覧」中の「green」を選択し,「読込」をク リックし,「開く」をクリック. – 「セキュリティ警告」が表示されたら「はい」を押す. – 「login as」に対してユーザ名を,「password」に 対してパスワードを入力. • 注意:ここで使用するユーザ名とパスワードは,工学院大学 計算機(Windows)にlogonする時にしようするものです. PostgreSQL-16 操作 1/22 • 自分用データベースを作成する. /usr/local/pgsql/bin/createdb ct13140db Password: ここでPostgreSQL用 CREATE DATABASE • 注意:ここで使用する パスワードは,講義中に配布した 「PostgreSQL用」 のものです. パスワードを打ち込み 「Enter」を押す. 画面には何も表示され ないの注意. このように 表示されれば成功. 全て大文字で無ければ失敗 PostgreSQL-17 操作 2/22 • 作成した自分用データベースに接続する. /usr/local/pgsql/bin/psql ct13140db Password: ←ここでパスワードを入力し「Enter」を押す Welcome to psql 8.2.5, 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 ct13140db=> ←このように表されればデータベースに接続中. PostgreSQL-18 操作 3/22 • データベースとの接続を切断する. ct13140db=> \q ct13140@green[103]: 表示が ct13140db=> でなくなれば,切断成功. 上の例では,表示が ct13140@green[103]: に代わっている. PostgreSQL-19 操作 4/22 • 再度自分用データベースに接続する. /usr/local/pgsql/bin/psql ct13140db Password: ←ここでパスワードを入力し「Enter」を押す Welcome to psql 8.2.5, the PostgreSQL interactive (略) ct13140db=> ←このように表されればデータベースに接続中. PostgreSQL-20 操作 5/22 • 存在する表を調べる(データベース接続 中). ct13140db=> \d No relations found. ct13140db=> このように 表示されれば成功. 「relation」とは 「表」のこと. 「表はない」との返 事が得られた. PostgreSQL-21 操作 6/22 • 表usertblを作る(データベース接続中). ct13140db=> CREATE TABLE usertbl ( ct13140db(> id integer, ct13140db(> name varchar(100), ct13140db(> email varchar(100) ct13140db(> ); CREATE TABLE ct13140db=> このように 表示されれば成功. 使用したSQL文は CREATE TABLE usertbl (id integer, name varchar(100), email varchar(100)); 途中の改行はあってもなくてもよい. 最後の;(セミコロン)を忘れない様に. PostgreSQL-22 操作 7/22 • 再度,存在する表を調べる(データベース 接続中). ct13140db=> \d List of relations Schema | Name | Type | Owner --------+---------+-------+--------public | usertbl | table | ct13140 (1 row) ct13140db=> 「操作7」で作成し た表が表示されれ れば成功. PostgreSQL-23 操作 8/22 • 表にSELECTを実行する(データベース接 続中). – 現在,表は空のはずである. ct13140db=> SELECT * FROM usertbl; id | name | email ----+------+------(0 rows) ct13140db=> この様に表示され れれば成功. PostgreSQL-24 操作 9/22 • 表にデータを入力する(データベース接続 中). ct13140db=> INSERT INTO usertbl VALUES (0, 'fukuda', '[email protected]'); INSERT 0 1 ct13140db=> SELECT * FROM usertbl; これがデータ id | name | email の挿入命令. ----+--------+--------------------表示は特に 0 | fukuda | [email protected] 変化なし. (1 row) ct13140db=> SELECTを実行して, 表の中身を確認し てみる. 途中改行は あってもなく てもよい. PostgreSQL-25 操作 10/22 • 表にデータを入力する(データベース接続中). ct13140db=> INSERT INTO usertbl VALUES (1, 'abe', '[email protected]'); INSERT 0 1 ct13140db=> INSERT INTO usertbl VALUES (2, 'koizumi', '[email protected]'); INSERT 0 1 ct13140db=> SELECT * FROM usertbl; id | name | email ----+---------+---------------------0 | fukuda | [email protected] 1 | abe | [email protected] 2 | koizumi | [email protected] (3 rows) ct13140db=> PostgreSQL-26 操作 11/22 • 表diarytblを作る(データベース接続中). ct13140db=> CREATE TABLE diarytbl (diaryid Integer, userid Integer, year Integer, month Integer, day Integer, txt varchar(1000)); CREATE TABLE ct13140db=> \d List of relations Schema | Name | Type | Owner --------+----------+-------+--------public | diarytbl | table | ct13140 public | usertbl | table | ct13140 (2 rows) 日記記事1個ごとに1行の表とする. diaryid:日記記事の通し番号 ct13140db=> Userid:日記を書いたユーザのID year,month,day:日記の日付 txt:日記本文 PostgreSQL-27 操作 12/22 • 表diarytblにデータを挿入する(データベース接続中). ct13140db=> INSERT INTO diarytbl VALUES (0, 0, 2007, 1, 1, 'gantan deshita'); INSERT 0 1 ct13140db=> INSERT INTO diarytbl VALUES (1, 0, 2007, 7, 29, 'senkyo deshita'); INSERT 0 1 ct13140db=> INSERT INTO diarytbl VALUES (2, 2, 2005, 8, 8, 'kaisan shita'); INSERT 0 1 ct13140db=> SELECT * FROM diarytbl; diaryid | userid | year | month | day | txt ---------+--------+------+-------+-----+---------------0 | 0 | 2007 | 1 | 1 | gantan deshita 1 | 0 | 2007 | 7 | 29 | senkyo deshita 2 | 2 | 2005 | 8 | 8 | kaisan shita (3 rows) ct13140db=> PostgreSQL-28 操作 13/22 • 現状の確認(データベース接続中). ct13140db=> SELECT * FROM usertbl; id | name | email ----+---------+---------------------0 | fukuda | [email protected] 1 | abe | [email protected] 2 | koizumi | [email protected] (3 rows) ct13140db=> SELECT * FROM diarytbl; diaryid | userid | year | month | day | txt ---------+--------+------+-------+-----+---------------0 | 0 | 2007 | 1 | 1 | gantan deshita 1 | 0 | 2007 | 7 | 29 | senkyo deshita 2 | 2 | 2005 | 8 | 8 | kaisan shita (3 rows) ct13140db=> PostgreSQL-29 操作 14/22 • 現状の確認(データベース接続中). ct13140db=> SELECT * FROM diarytbl WHERE userid=0; diaryid | userid | year | month | day | txt ---------+--------+------+-------+-----+---------------0 | 0 | 2007 | 1 | 1 | gantan deshita 1 | 0 | 2007 | 7 | 29 | senkyo deshita (2 rows) ct13140db=> PostgreSQL-30 操作 15/22 • 現状の確認(データベース接続中). ct13140db=> UPDATE diarytbl SET txt='ganjitu deshita' WHERE diaryid=0; UPDATE 1 ct13140db=> SELECT * FROM diarytbl; diaryid | userid | year | month | day | txt ---------+--------+------+-------+-----+----------------1 | 0 | 2007 | 7 | 29 | senkyo deshita 2 | 2 | 2005 | 8 | 8 | kaisan shita 0 | 0 | 2007 | 1 | 1 | ganjitu deshita (3 rows) ct13140db=> 表内の列の順番は全く保証されていないので, RDBMSが勝手に決めてくる. PostgreSQL-31 操作 16/22 • 内部結合(データベース接続中). ct13140db=> SELECT * FROM usertbl INNER JOIN diarytbl ON usertbl.id = diarytbl.userid; id | name | email | diaryid | userid | year | month | day | txt ----+---------+----------------------+---------+--------+------+-------+-----+----------------0 | fukuda | [email protected] | 0 | 0 | 2007 | 1 | 1 | ganjitu deshita 0 | fukuda | [email protected] | 1 | 0 | 2007 | 7 | 29 | senkyo deshita 2 | koizumi | [email protected] | 2 | 2 | 2005 | 8 | 8 | kaisan shita (3 rows) ct13140db=> PostgreSQL-32 操作 17/22 • 表内のデータの削除(データベース接続中). ct13140db=> DELETE FROM diarytbl WHERE diaryid=0; DELETE 1 ct13140db=> SELECT * FROM diarytbl; diaryid | userid | year | month | day | txt ---------+--------+------+-------+-----+---------------1 | 0 | 2007 | 7 | 29 | senkyo deshita 2 | 2 | 2005 | 8 | 8 | kaisan shita (2 rows) ct13140db=> PostgreSQL-33 操作 18/22 • 表の削除(データベース接続中). ct13140db=> DROP TABLE diarytbl; DROP TABLE ct13140db=> \d List of relations Schema | Name | Type | Owner --------+---------+-------+--------public | usertbl | table | ct13140 (1 row) ct13140db=> 表を削除すると, 表内のデータは全て消失するので注意. PostgreSQL-34 操作 19/22 • データベースとの接続を切断(データベース接続 中). ct13140db=> \q ct13140@green[106]: PostgreSQL-35 操作 20/22 • データベースの削除. ct13140@green[106]:/usr/local/pgsql/bin/dropdb ct13140db Password: ←ここでパスワードを入力し「Enter」を押す DROP DATABASE ct13140@green[107]: データベースを削除すると, データベース内の全てのデータが失われるので注意!! 頻繁に行う作業ではありません. PostgreSQL-36 操作 21/22 • 自分用データベースを再度作成する. /usr/local/pgsql/bin/createdb ct13140db Password: ←ここでパスワードを入力し「Enter」を押す CREATE DATABASE • 自分用データベースに再度接続. /usr/local/pgsql/bin/psql ct13140db Password: ←ここでパスワードを入力し「Enter」を押す Welcome to psql 8.2.5, the PostgreSQL interactive terminal. (略) ct13140db=> \d No relations found. ct13140db=> 空の(表が1個もない)データベースが 作成された. PostgreSQL-37 注意事項 •コマンドラインでは ct13140@green[102]:tcsh と1回入力すると使いやすくなる. BackSpaceが使える,矢印でカーソルを移 動できる,↑(上矢印)で前の入力が出てくる など. PostgreSQL-38 注意事項 • 成功時のメッセージは全て大文字のはずで す.例えば「CREATE DATABASE」など. • 小文字であったら失敗です. PostgreSQL-39 注意事項 • RDBMSに接続中は, ct13140db=> と表示されるのが正常な状態です. • ct13140db(> ct13140db'> などと表示されたのなら「コマンド入力途中 」という変な状態です.これを正常に戻す には CTRL+Cを入力する(CTRLを押しな がらCを押す). PostgreSQL-40 注意事項 • RDBMSに接続中は, ct13140db=> と表示されるのが正常な状態です. • ct13140db(> ct13140db'> などと表示されたのなら「コマンド入力途中 」という変な状態です.これを正常に戻す には CTRL+Cを入力する(CTRLを押しな がらCを押す). PostgreSQL-41 注意事項 • createdbで作成したデータベースは,ユーザが (dropdbで)消さない限り残り続けます. – PuTTYの再接続やPCの再起動で消えるようなものではありま せん. • 既に存在するデータベースと同名のデータベースは作 成できません. • createdbを何度やっても失敗する場合は,その名前 のデータベースが既に存在しているのかもしれません. 確認のためにそのデータベースへの接続を行ってみま しょう.接続コマンドはP18(操作 2/22)を参照. PostgreSQL-42 注意事項 • PuTTYのlogin時や,PostgreSQLコマ ンド実行時にパスワードを尋ねられるので 入力する必要があるが, このときは何を入力しても画面には表示さ れません. • 表示されないだけで入力は行われていま す.正しく打ち込んでEnterを押してくださ い. PostgreSQL-43
© Copyright 2024 ExpyDoc