postgresで新規のデータベースを作成したいと思います。データベース名は、QuickKnowLedgeにちなんで、QKで 作成してみます。 以下作成するまでの手順です。
- dbuserにsuします。 # su - dbuser
- データベースを作成します。 $ createdb qk -O dbuser CREATE DATABASE
- qkデータベースに接続します。 $ psql qk Welcome to psql 8.1.11, 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
- あっさりできてしまったので、とりあえずコマンドで遊んでみます。テーブルスペースがどうなっているか確認してみます。 qk=# \db+ List of tablespaces Name | Owner | Location | Access privileges ------------+----------+----------+------------------- pg_default | postgres | | pg_global | postgres | | (2 rows)
- 新規でテーブルスペースを作成してみます。いったんrootに戻り、空のディレクトリを作成しました。 # mkdir /db # chown -Rf dbuser /db # chgrp -Rf dbuser /db # chmod 777 /db
- 再び,dbuserにsuします。 # su - dbuser
- では、create tablespace をいたします。 $ psql qk Welcome to psql 8.1.11, 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 qk=# CREATE TABLESPACE ts1 LOCATION '/db/ts1'; ERROR: could not set permissions on directory "/db/ts1": 許可されていない操作です
- どうもアクセス権があるような、ないようなメッセージで、わざわざディレクトリのパーミッションを777にしたのにだめなんですかね。。ディレクトリのオーナを、posgresにしてみます。 # chown -Rf postgres /db # chgrp -Rf postgres /db
- もう一度、トライしたところうまくはいきましたが、いまいちよく理解しておりません。(postgresのユーザーに何の関係があるのか?) qk=# CREATE TABLESPACE ts1 LOCATION '/db/ts1'; CREATE TABLESPACE qk=# \db+ List of tablespaces Name | Owner | Location | Access privileges ------------+----------+----------+------------------- pg_default | postgres | | pg_global | postgres | | ts1 | dbuser | /db/ts1 | (3 rows)
- ひとまずテーブルスペースの作成は完了しました。思ったのが、db2のテーブルスペースの考え方とすこし違うのかな?といった感じです。次回はqkデータベースのデフォルトテーブルスペースを、このts1に移動するところをやってみたいと思います。