PostgreSQL

(更新:2017/10)
(作成:2005/01)

PC U*IXで扱えるDBで、MySQLと並んでメジャーなのがこれ。話によるとMySQLより高機能だが、Windowsで使うにはCygwin経由でないとダメとか。
(2017/10追記)いつの間にかWindowsパッケージも出てたみたい。

設定

ネットワークアクセス

取り敢えず以下の設定を行なう。

#### /etc/postgresql/postgresql.conf

tcpip_socket = true
port = 5432

更にアクセスを許可したいIPとネットマスクを定義してやる。

#### /etc/postgresql/pg_hba.conf

local   all                                     ident sqmeuser
host    all     127.0.0.1       255.0.0.0       ident sameuser
# こんな感じで追加
host    all     192.168.1.0     255.255.255.0   password
host    all     0.0.0.0         0.0.0.0         reject

ここで指定した password は、下記にも書いてあるがPostgreSQL独自のパスワード管理を使う指定。 pam とかもあるが、どうもうまく動かないようなので。

初期化

ユーザレベルでDBを作成する前に、まずユーザにDB作成権限を与える必要がある。
権限を与える際、二つほど質問される。見れば判ると思うけど、一つ目はDB作成権限を与えるかどうか。二つ目は他にDB作成権限のあるユーザを作成する権限を与えるかどうか。
一つ目の項目は当然必要だが、二つ目の項目はつまるところ「自分自身が postgres ユーザと同等の権限を持つかどうか」という項目なので、あまりお勧めしない。

# su - postgres
$ createuser hoge
Shall the new user be allowed to create databases? (y/n) y
Shall the new user be allowed to create more new users? (y/n) n
CREATE USER

データベース作成

DB作成権限を持ったら、次はDBを作成してみる。

$ createdb hoge
CREATE DATABASE

作りたての時点では当然内容は空。以下のようにして確認してみると良い。

$ psql diary
Welcome to psql x.x.x, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help on internal slash commands
       \g or terminate with semicolon to execute query
       \q to quit

diary=> \d
No relations found.

制限

パスワードとか。取り敢えずPostgreSQL独自のパスワード制限を掛けてみる方法。 DBにログインして、以下のようにすればそのDBにパスワード制限を掛けることができる。

db=> ALTER USER hoge WITH PASSWORD 'fugafuga';
ALTER USER
db=>

これでパスワードを設定できる。しかし、デフォルトだとパスワード制限を設定していないので、多分パスワードとか聞かれずにログインが出来ると思う。以下のように設定すると良い。

#### /etc/postgresql/pg_hba.conf

local   all                                     password
host    all     127.0.0.1       255.0.0.0       ident sameuser
host    all     0.0.0.0         0.0.0.0         reject

Tips

SELECT文WHERE節での検索について色々と。

ワイルドカードを用いる方法

  • 'ほげ' で始まる任意長の文字列にマッチさせる方法。
`SELECT * FROM hoge WHERE foo LIKE 'ほげ%';
  • 'ふが' で始まり任意一文字を持つ文字列にマッチさせる方法。
SELECT * FROM hoge WHERE foo LIKE 'ふが_';

正規表現を用いる方法

  • 正規表現で /^piyo.*/ を検索させる方法。
SELECT * FROM hoge WHERE foo ~ '^piyo.*';
  • 正規表現で /foo?/ 以外を検索させる方法。
SELECT * FROM hoge WHERE foo !~ 'foo?';
  • 正規表現で大小文字を区別せず /bar/ を検索させる方法。
SELECT * FROM hoge WHERE foo ~* 'bar';
  • 正規表現で大小文字を区別せず /?kee$/ 以外を検索させる方法。
SELECT * FROM hoge WHERE foo !~* '?kee$';

その他

  • Booleanフラグを比較する場合
SELECT * FROM hoge WHERE foo IS true
SELECT * FROM hoge WHERE foo IS NOT true