opamp_sando's blog

クソザコが割りと適当なことを書くためにある備忘録です。あとたまに普通の日記も書きます

ArchLinuxにPostgreSQLをインストールして動かす

とりあえずメモ。

記事の情報が古いので追記しておきます。
現在PostgreSQLをインストールした場合、自動で初期化が行われない。よってインストール後に次のコマンドを手動入力する

$ sudo chown postgres:postgres /var/lib/postgres
$ sudo -u postgres initdb --locale en_EU.UTF-8 -D '/var/lib/postgres/data'

また、起動もrc.confは排除されてしまったのでsystemctlコマンドで次のようにする。

$ sudo systemctl enable postgres

これでOS起動時自動起動する。
また

$ sudo systemctl start postgres

とすると起動させることができる。

ArchLinuxでPostgreSQLを動かす方法... とりあえずpacmanからインストールする。

$ sudo pacman -S postgresql

ちなみに現在は9.1.2がインストールされるはず。

で、/etc/rc.d/postgresqlを見るかぎり、ArchLinuxはpostgresql起動時に初期化されてないことを確認すると自動で初期化をやってくれるようだ...
postgresだったかそんな感じのユーザーを自動で作ってそのユーザーがpostgresqlのユーザーとなる。
で、データベースは /var/lib/postgres以下になるようだ。


とりあえず、rc.confにpostgresqlが自動起動するように設定する。

$ sudo vi /etc/rc.conf

して

# -----------------------------------------------------------------------
# DAEMONS
# -----------------------------------------------------------------------
#
# Daemons to start at boot-up (in this order)
#   - prefix a daemon with a ! to disable it
#   - prefix a daemon with a @ to start it up in the background
#
# If you are sure nothing else touches your hardware clock (such as ntpd or
# a dual-boot), you might want to enable 'hwclock'. Note that this will only
# make a difference if the hwclock program has been calibrated correctly.
#
# If you use a network filesystem you should enable 'netfs'.
#
DAEMONS=(syslog-ng network crond @alsa postgresql) # ここにpostgreslqを追加

上のようにDAEMONS=の括弧の中にpostgresqlを追加する。


これで起動時に自動でpostgresqlが立ち上がるようになるはず。
ここまでできたら、postgresqlをrc.d以下のから直接起動するかrebootしてやる。

$ sudo reboot

でおk。

で、起動したらpostgresqlも立ち上がってる状態だと思うので後は適当に設定とかすれば...

$ createuser -a -d -U postgres -P username

などすればユーザーが作成できる。
このコマンドのオプションについてだけど
"-a"をつけると新規ユーザーはスーパーユーザーになる。(他のユーザーを作ることができる)
"-d"をつけると新規ユーザーは新しいデータベースの作成が許可される。
"-U"をつけるとpostgresqlに接続するユーザーを指定できる。(上の方法でインストールしたならpostgresに指定すればおk)
"-P"をつけるとパスワードを設定できるようだ。

で、ユーザーを削除したければ

$ dropuser username

すればおk


で、データベースを追加するには

createdb -E UTF8 -O OwnerUserName -U userName db_name

とする。
オプションについては...
"-U"はcreateuserと同じく接続するユーザーを指定する。
"-O"は新規作成するDBの所有者を指定する
"-E"はEncodingで文字コードを指定する。UTF8とかにしておけばいいかと。
で、一番最後に新規作成するdbの名前を指定する。

これでdbが追加できる。

dbを削除するには

$ dropdb dbname

を使う。


その他のコマンドなんかは以下のサイトが参考になるかも...
http://www.develop-memo.com/database/postgresql/postgresqloperate.html
あと最新の日本語ドキュメント
http://www.postgresql.jp/document/9.1/html/







せっかくなのでPostgreSQLで少し遊んでみる

せっかくインストールしたので遊んでみる。

$ createuser -a -d -U postgres -P opamp

してとりあえず新規ユーザーとしてopamp作成。

$ createdb -E UTF8 -U opamp practice

して練習用の新規DBを作成.

で、早速遊んでみる。psqlコマンドで以下のようにする。(-Uは必要かわかんないけどとりあえずつけた)

$ psql -U opamp practice
psql (9.1.2)
Type "help" for help.

practice=#

で、上で作ったpracticeに接続できた。
ちなみに終了するときは "\q" すればおk。

とりあえず自分の情報を保持する新しいテーブルを作ってみる。とりあえずhumanという名前で作ってみるか。

practice=# CREATE TABLE human (
practice(# name varchar(30),
practice(# age int,
practice(# weight int 
practice(# );
CREATE TABLE

という感じ。上のやつは別に1行でやってもいいんだろうけど、上のように複数行に分けても ";" があるまでが1コマンドとみなされるのでおk

varcharは30文字保持可能。ageは年,weightは体重。両方ともintにしている。
これでテーブルができたはず。ちなみにDB的にはこのname,age,weightをそれぞれ列とかいうのかな?


とりあえず、これに情報(行)を入れていく...

practice=# INSERT INTO human (name,weight,age) 
practice-# VALUES('opamp',50,16);
INSERT 0 1

とする。INSERTというのを使う。humanテーブルを指定し最初の括弧の中には列の名前を入れる。
で、次の行の括弧で最初の括弧に書いた順番でデータを入れていく。(最後に ";" を忘れない)
ちなみに、最初の括弧を書かずに最後の括弧だけ書くとCREATE TABLEしたときに指定した列の順番で値を入れる必要がある。



で、次に上で登録したやつを見てみる。

practice=# SELECT * FROM human;
 name  | age | weight 
-------+-----+--------
 opamp |  16 |     50
(1 row)

という感じ。こうするとhumanの中が全部見れるのかな。
表のように表示される。というかリレーショナルDBってそういうものって聞いた。
nameはopamp,ageは16,weightは50と見たらわかる。

ちなみに

practice=# SELECT name FROM human;
 name  
-------
 opamp
(1 row)

と "*" を"name"と列の名前にしたらその列だけ取り出すことも可能。他にもいろいろな取り出し方ができると思う。



で、続いて上で作ったhumanテーブルの中身のデータを削除してみる。

practice=# DELETE FROM human;
DELETE 1

とすることでhumanの中身を削除できる。

practice=# SELECT * FROM human;
 name | age | weight 
------+-----+--------
(0 rows)

削除されたようだ。


で、テーブルを削除するには

practice=# DROP TABLE human;
DROP TABLE

とすればhumanは完全に削除されてしまう。

table削除を確認してみる。
それには"\d"というのを使えばいい。とりあえず以下は2つのテーブルhuman,cityが存在するとき"\d"をした結果

practice=# \d
       List of relations
 Schema | Name  | Type  | Owner 
--------+-------+-------+-------
 public | city  | table | opamp
 public | human | table | opamp
(2 rows)

で、上のDROPを使ってhumanを削除したら

practice=# \d
       List of relations
 Schema | Name | Type  | Owner 
--------+------+-------+-------
 public | city | table | opamp
(1 row)

となる。ちゃんと削除されてるのがわかる。"\d"を使うとテーブルを見ることができる。


で、最後にpsqlを終了する。

practice=# \q 

と"\q"すればおk


まあ、遊びはこんなものかな...


以下ちょっとした追記

$ psql -U opamp
psql (9.1.2)
Type "help" for help.

opamp=# \l
                                       List of databases
        Name         |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
---------------------+----------+----------+-------------+-------------+-----------------------
 opamp               | opamp    | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres            | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 practice            | opamp    | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 redmine_development | opamp    | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 redmine_test        | opamp    | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0           | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
                     |          |          |             |             | postgres=CTc/postgres
 template1           | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
                     |          |          |             |             | postgres=CTc/postgres
(7 rows)

と "\l" したらDB一覧が見れる。 ふむ・・・redmineを使ってみようとした形跡があるけど失敗したんだよねorz


で、この状態でpracticeに接続する場合

opamp=# \c practice
You are now connected to database "practice" as user "opamp".
practice=# 

と"\c"を使ってやる。 "\c dbname" でそのdbに接続できる。
またユーザーも指定するなら"\c dbname username" すればおk

Firefox ブラウザ無料ダウンロード