PostgreSQL

2007-01-30 (火) 16:06:48 (1825d)

DBサーバ関連


インストールに関しては、連携させるものによって多少の違いがありますので割愛します。
リレーショナルデータベースシステムであるpostgresql(いかpostgres)は日本人がよく使うそうです。
簡単なsql文でのデータの取り出し、削除、挿入、更新を行うことやwebと連携させたECサイトなどでのDBの設計等、データベースソフトでは学ぶことが沢山あります。
ここではpostgresqlを例に一連の操作を使う頻度が多いであろうコマンドを中心に、勉強していくことにします。

初期設定

$ su

グループとユーザーを作ります。 (サーバーOSが FreeBSD の場合は、useradd の代わりに adduser とします。)

# groupadd postgres
# useradd -g postgres -d /usr/local/pgsql postgres
# passwd postgres

インストール先ディレクトリを作成します。

# mkdir /usr/local/pgsql
# chown -R postgres:postgres /usr/local/pgsql

インストール後の設定

 
export POSTGRES_HOME=/usr/local/pgsql
export PGLIB=$POSTGRES_HOME/lib
export PGDATA=$POSTGRES_HOME/data
export MANPATH="$MANPATH":$POSTGRES_HOME/man
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PGLIB"
  • データベースの初期化
    initdb --encoding=EUC_JP --no-locale -D /usr/local/pgsql/data 
    日本語を使用できるようにするためにEUC_JPを追加しています。
 

ユーザの追加と権限の付与

postgres所有の空のDB "postgres" を作る。

user$ su - postgres
postgres$ createdb -E EUC_JP postgrespostgresにDB上のパスワードを与える。
postgres$ psql
postgres=# ALTER USER postgres PASSWORD 'password'

まずpostgresユーザのパスワードを設定します。

postgres$ psql
postgres=# CREATE USER foo WITH PASSWORD 'password' CREATEDB

上記のコマンドでfooユーザを作成。 パスワードも設定できます。
最期のCREATEDBはデータベース作成権限有りと言う意味です。
参照のみのユーザの場合はこの部分を削ります。
コマンドラインでは

postgres$ createuser -P foo

上記のように記述すればユーザが作成できます。

実用ユーザ所有のデータベースを作成
psql で行う場合:

postgres$ psql
postgres=# CREATE DATABASE sample OWNER='foo' ENCODING='EUC_JP'

コマンドラインで行う場合

postgres$ createdb -E EUC_JP -O 'foo' sample
 

データベースの作成とテーブルの作成

postgresユーザもしくはpostgresqlのスーパーユーザであることが必須条件
db作成

# CREATEdb hoge

その後psql

# psql hoge
postgres=#

その後psql内でテーブル作成

# create table meibo (name varchar(30) , age integer , address varchar(80));

上記コマンド例では「meiboというテーブルを作成」そのmeiboテーブルには「name,age、addressというカラムを作成」、nameカラムは30バイトのvarchar、ageカラムはinteger、addressカラムは80バイトのvarcharという風に設定しています。

psqlの主なコマンド

テーブル、シーケンス、インデックス等の情報を表示\d \d table_name \d sequence_name \d index_name
関数情報表示\df\ df abs
現在存在するデータベース一覧\l
SQL のヘルプ\h \h sql
PSQL メタコマンドのヘルプ\? \? psql_meta_command
出力結果のファイル出力\o filename
PSQL モード終了\q ^D
 
 
 
 

sql文の基本的な使い方

データベースソフトをユーザとして使用する場合に、基本的なsql文を使用することがあります。
まずはselect、delete、update、insert文を覚えるところからはじめます。
それぞれの役割は以下のとおりです。

コマンド役割使用例
select値をとりだしますselect * from meibo;
insert値を挿入しますinsert into test values ('hoge',23,'09011112222');
delete値を削除しますdelete from test where user = 'hoge';
update値を更新しますupdate test set tel = '09011112222' where user = 'hoge';
 

それぞれの使い方は以下で詳しく記述しますが、sql文の最期には;を必ず入力します。
それでは以下、それぞれの詳しい使用方法です。

 
 

select文

select文は色々な場面でしようします。
重要なコマンドです。 主な使い方は

postgres=# select * from meibo;
      name       | age |   address
-----------------+-----+-------------
     yoshida     |  23 | tokyo fuchu
(1 row)

上記のコマンドは「meiboという名前のテーブルの値をすべて表示しなさい。」というコマンドです。

insert文

insertもselectと同様に重要なコマンドです。
まずは使ってみます。今回は上記selectで使用したmeiboテーブルにname=yamada、age=35、address=iwate morioka、として値を挿入します。

> insert into meibo values('yamada',35,'iwate morioka');
INSERT 17233 1

上記のように「INSERT 17233 1」というようなメッセージが出ればOKです。
もしも構文になんらかの間違いがあれば、~

ERROR:  syntax error at or near ";" at character 61

のようなエラーが表示されます。短い構文ですと間違いがすぐみつかるのですが、長い構文ですとなかなかそうもいきません。エラーの内容を頼りに、適宜修正するようにします。
念のためselectで値が挿入されたか確かめます。

postgres=# select * from meibo;
      name       | age |    address
-----------------+-----+---------------
yoshida         |  23 | tokyo fuchu
yamada          |  35 | iwate morioka

これでOKです。
また、大量のデータをinertしたい場合やファイルからデータを挿入したい場合はCOPYコマンドを使います。
使い方は

postgres=# COPY name FROM '/home/user/name.txt';

です。name.txt内のデータがnameカラムに挿入されます。

delete文

deleteコマンドは構文のミスや抜けで、まったく違うデータもしくはカラムのデータすべてを消してしまう恐れがあるコマンドです。
使用する際にはかならず間違いがないか、確認してから行うようにします。
使い方は様々ですが

postgres=# delete from meibo where user = 'yoshida';
DELETE 1

のように使用します。削除されているか確認

postgres=# select * from meibo;
  name  | age |    address
--------+-----+---------------
yamada |  35 | iwate morioka

消えています。
今回はmeiboテーブルのnameで指定しましたが、別のカラムを指定することもできます。
また、

#delete from meibo;

と、where以下を抜かしてしまうと

postgres=# delete from meibo;
DELETE 1
postgres=# select * from meibo;
name | age | address
------+-----+---------
(0 rows)

meiboテーブルのすべての値が削除されてしまいます。
絶対にwhere句は記述して実行するようにします。

update文

データの変更、更新を行うコマンドです。
削除と同様に構文の抜けには注意して使用します。
使い方は


 

参考
http://www.asahi-net.or.jp/~aa4t-nngk/pgsql.html
http://www.spicy-islands.com/index.html