初めての Rast (4) つーか、初めての PostgreSQL だなこりゃ
8/1のつづき〜。休み時間とか定時後にやっているので、忙しいとどうもイカン。
DB は PostgreSQL でやります。最近 MySQL しか触ってないのでリハビリ。
$ COLUMNS=100 dpkg -l | egrep "(postgresql|pgsql)" ii libpgsql-ruby 0.7.1-3 ii libpgsql-ruby1.8 0.7.1-3 ii postgresql 7.4.7-6sarge1 ii postgresql-client 7.4.7-6sarge1
PostgreSQL 関連のパッケージはこんなかんじ。
データベース作りましょ。
$ sudo su - postgres $ createdb -E UNICODE rastdb CREATE DATABASE $ psql rastdb Welcome to psql 7.4.7, the PostgreSQL interactive terminal. ... rastdb=# \l List of databases Name | Owner | Encoding -----------+-------------+---------- rastdb | postgres | UNICODE template0 | postgres | EUC_JP (2 rows)
Rast に合わせて、Unicode (多分 UTF-8) でデータベースを作っておく。こっちは EUC-JP コッチは UTF-8 じゃ、ややこしいので。
実は、-E オプションを入れるのを忘れていたので、
DROP DATABASE
して作り直した。
テーブル作る。
rastdb=# CREATE TABLE Items ( rastdb(# id SERIAL PRIMARY KEY, rastdb(# name TEXT, rastdb(# description TEXT rastdb(# ); ... rastdb=# \d List of relations Schema | Name | Type | Owner --------+--------------+----------+---------- public | items | table | postgres public | items_id_seq | sequence | postgres (2 rows) rastdb=# \d Items Table "public.items" Column | Type | Modifiers -------------+---------+-------------------------------------- id | integer | not null default | | nextval('public.items_id_seq'::text) name | text | description | text | Indexes: "items_pkey" primary key, btree (id)
できたできた。
実は、テーブル名を Item (単数形) にしていたので、ALTER TABLE Item RENAME TO Items; して直した。
一々作り直さなくても、
app/models/item.rb に
table_name :item
でもいいし、
config/enviroment.rb に
ActiveRecord::Base.pluralize_table_names = false
でもいいんだけど…。
さらに、id のデータ型を INT にしてしまったので、SERIAL で作り直した。
CREATE SEQUENCE items_id_sql; ALTER TABLE Items ALTER id SET DEFAULT nextval('items_id_seq');
で消さなくても変更できるはず。)
ユーザーも作っておこう。
rastdb=# CREATE USER rastuser WITH PASSWORD 'rastuser-passwd'; CREATE USER rastdb=# GRANT ALL ON Items TO rastuser; GRANT rastdb=# GRANT ALL ON items_id_seq TO rastuser; GRANT
(sequence の方は権限付与を忘れがち。)
弾かれないように。
$ sudo view /etc/postgresql/pg_hba.conf # Database administrative login by UNIX sockets local rastdb rastuser password ... # All IPv4 connections from localhost host rastdb rastuser 127.0.0.1 255.255.255.255 password ...
(/etc/init.d/postgresql reload を忘れないように。)
アクセスできるかな?
$ psql -d rastdb -U rastuser -W (rastuser-passwd と入力)
これで PostgreSQL は終了。