WindowsのPostgreSQLで初めてDBを作ってみた


はじめに

とりあえず仕事で、なんとはじめてpostgreSQLでテーブルを作ってみてphpで動かしてなんちゃらやるということをすることになった。
Wordpressでも結局使ってないのに。まあでも、これでテーブル作れたら、Woredpressで新規のテーブル作ってそれを表示させるなんてこともできる自信がつくと思うので頑張ろうと思う(まあそもそもWordpressのはMySQLなんだけど)

やったこと

まずとにかくpostgreSQLをインストールして使えるようにすること。

 ※ PATHを設定するというのはコマンドスクリプトから起動できるようにする作業のこと。

上記を見れば、多分インストールしてコマンドスクリプトで起動するところまでは困ることはないと思う。
※ コマンドスクリプトからインストールするという手もあるみたいですがそれは他のサイトを見ていただければ。

ただ、問題はそこから。

上を見ていても、
まずユーザー作るのが先なのか、DBを作るのが先なのか、というのがよくわからなかったのでググった。
いろいろ調べて、
ひとまず何もかも新規で、テーブルを作成するまでの順番を整理する。

0)コマンドスクリプトを起動

Win + R で[ファイル名を指定して実行]ダイアログを開き「cmd」で検索し実行する

1) postgreSQLに接続

具体的には、
まずpostgresのユーザー(postgres)で、DB(postgres)にログインする形で
postgreSQLにログインする

psql -d postgres; //できない場合があります
psql -d postgres -U postgres; //上でできなければこれで

※ インストール完了後に、postgresユーザーとpostgresデータベースはできてる
※ ちなみにpsqlであって、psglではない。注意。 
   postのpとs、そして最後のSQLのqlを略称としてコマンドにしたっぽい。
   そう覚えておけばコマンドを打ち間違えるのは無いと思う。

2) ユーザー作成と権限付与

DBを作成するにはコマンドを実行するロールがスーパーユーザーか、
CREATEDB 権限を持っていないといけない。

たしかインストールしてコマンドスクリプト内でユーザー作った気がするが、
忘れてしまったので確認
※ postgreSQLではユーザーのことをロールという

\du

※ Winの場合は英語モードで¥キーを押せばそのままバックスラッシュになる
 Macの場合はoption + ¥ キー

ロール名はpostgresだけでした。
なかったので以下で作る

create user (新規ロール名);

Enterして、「CREATE ROLE」と出てたら成功している。
※最後に「;」をつけるのを忘れない!
どうやら、;をつけるのとつけないコマンドの両方あるようだ

次にセキュリティ上、パスワードも設定する。

\password (今登録したロール名) 

Enterすると、「Enter new password:」がでるので新パスを入力、Enter
すると、「Enter it again:」が出るのでもう一度入力してEnter
postgres=# (入力待ち状態)となって設定できたことになる

ただ、これはcreateの段階でできるらしい

create user (新規ロール名) with password '(新規パスワード)';

次に権限を付ける
具体的にはスーパーユーザー、DBを作れる権限をつける

ALTER ROLE (今登録したロール名) with SUPERUSER CREATEDB;

SUPERUSER と、CREATEDBの間は半角スペースを入れる
ALTER ROLEと返ってきて、成功している
\duしてみると権限が付与されていることが確認できる

3) データベース作成

ではつぎにいよいよDB作成。
今作ったロールで作成をするので作ったロールに移動する。

まずは一旦ログアウト。

\q

Uをさっき作ったロールにして、 最初はpostgres(デフォルトDB)にアクセスする形でログイン

psql -U (登録したユーザー) postgres

●●のパスワード:というのが出るのでさっき設定したパスを入力
すると

psql(バージョン名)
"help"でヘルプを表示します。
postgres(テーブル名)=#

次にいよいよDB作成

create database (新規データベース名);

※;を忘れないように!(しつこい)
すると、しばらく待機中になって
「CREATE DATABASE」となり成功する

次にそのDBにアクセス

\connect (新規作成したDB名)

ここでは;をつけない。
どうやら頭に\がつくと、;はつけないみたいだ

すると、
「データベース(新規作成したDB名)にユーザ"(さっき登録したロール)"として接続しました。」
とでて、
(新規作成したDB名)=# となり、コマンド待機状態になる

4) 終わりに  テーブル作成に入る前に

次に、テーブルを作るわけだが、あらかじめどういうテーブルを作成するのか考えておいて、
さらにはエクセルとかパワポとかでテーブルを仮作成してそれを見ながら作る。
こうすると考えて修正する手間が省けて工数削減できる。
これは当たり前っちゃ当たり前な話だと思うのだけど、重要だと思う。

ちなみに、テーブル作成から再開する場合は、
上のような面倒なことをやらなくても、下記コマンドからいきなり再開できる。

psql -U (登録したロール) (新規作成したDB)

 おまけ

たとえば、新しいロールを作りたい場合、
一旦ログアウトして、posgreロールでログインしてから作成しないといけない
なぜかというと、ロールを作れる権限がないから。
だから、結局ここの1)からやることになる。

逆に言えば、1)がもし既存のロールだった場合、
DBやロールを作る権限を持ってるロールでなければ1)以降のことができないので注意する。

新規ならともかくDB運用している間に、新規ロールを作りたくなったときにこれを実行して
エラーになる、、、ていうパターンがあり得ると思うのでメモとして残しておく