
自分向けマニュアルとして、postgresqlで、ユーザ、DB、テーブル作成からcsvインポートまでを書いておく。同一名のPostgresqlユーザ、CentOSユーザを作成するので、混乱に注意。
今回の環境
CentOS 6.5
Postgresql 9.3
CentOS 6.5
Postgresql 9.3
自動で作成されるユーザー「postgres」へログイン。
$ su - postgres
Postgresqlユーザ(ロール)を作成。DBログインしていない状態で行う。
bash-4.1$ createuser hoge
DBへログイン。
bash-4.1$ psql
今回はhogeユーザーにデータベース作成権限を与え、ユーザー作成権限は与えない。ファイル経由のコピー(CSVからのインポート)をするためにSuperUserとする。
postgres=# ALTER ROLE hoge SUPERUSER CREATEDB NOCREATEUSER;
「ALTER ROLE」と表示されたらOK(最後のセミコロン「;」を忘れずに)。
「ALTER ROLE」と表示されたらOK(最後のセミコロン「;」を忘れずに)。
パスワードを設定、変更する場合は以下を実行する。データベースへの接続にパスワードログイン認証を行うには、pg_hba.confに"password"や"md5"の設定がされている必要がある。
postgres=# ALTER ROLE hoge WITH PASSWORD 'パスワード文字列';
DB及びユーザpostgresからログアウト。
postgres=# \q
bash-4.1$ exit
bash-4.1$ exit
続いてDB用CentOSユーザー作成。Postgresqlのユーザーと名前を合わせておく。このユーザでログインしなければいけないので、nologinにはしない。
$ useradd hoge
$ passwd hoge
パスワードを聞いてくるので入力する。
$ passwd hoge
パスワードを聞いてくるので入力する。
作成したユーザーへsu。
$ su - hoge
DBを作成し、ログイン。
hoge$ createdb mydb
hoge$ psql mydb
hoge$ psql mydb
テーブルを作成。「カラム名(スペース)型」をカラムごとにカンマで区切って入力する。主キーには「(スペース)PRIMARY KEY」を追加する。最後のセミコロンを入力するまでは、改行しても続き文として認識される。
mydb=# CREATE TABLE mytable(column1 type, column2 type PRIMARY KEY, column3 type);
確認系及び終了コマンドは次の通り。
DB確認・・・「\l」
テーブル確認・・・「\d」
カラム確認・・・「\d mytable」
終了・・・「\q」
続いてcsvからデータをインポートする。
どこでも良いが、今回は/home/hoge/にインポートしたいcsvを置く(例としてファイル名"a.csv"とする)。
必要に応じてUTF-8へエンコード。エンコードにはnkfを使うので、ない場合yum install nkfでインストールしておく。
読み取り許可が必要なので、ホームディレクトリのパーミッション設定をする(DB単独で動かすなら744でもいいかも知れない。このディレクトリでphpを実行する予定があったので、今回は755とした)。
root$ chmod 755 /home/hoge
root$ su - hoge
hoge$ nkf -w --overwrite a.csv
hoge$ psql mydb
mydb=# TRUNCATE mytable; ←mytableのレコード全件削除。全件置換の時など必要に応じて実行。
mydb=# COPY mytable FROM '/home/hoge/a.csv' WITH CSV; ←csvよりレコードインポート。
インポートした行数が表示される。
root$ su - hoge
hoge$ nkf -w --overwrite a.csv
hoge$ psql mydb
mydb=# TRUNCATE mytable; ←mytableのレコード全件削除。全件置換の時など必要に応じて実行。
mydb=# COPY mytable FROM '/home/hoge/a.csv' WITH CSV; ←csvよりレコードインポート。
インポートした行数が表示される。
あとはSELECTなりUPDATEなりSQL文をうてば、いい感じに結果が返ってくるはず。
以上。