web-technical-blog

web開発に関する技術メモ

CentOS6系にPostgreSQL9.4をインストールした際のメモ

久しぶりにPostgreSQLを使用する機会が発生したのでメモ。

CentOS release 6.9 (Final)
PostgreSQL 9.4

# リポジトリの追加
# wget http://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/pgdg-centos94-9.4-3.noarch.rpm
# yum localinstall pgdg-centos94-9.4-3.noarch.rpm

# インストール
# yum install postgresql94-server.x86_64 postgresql94.x86_64 postgresql94-libs.x86_64

# データベースの初期化
# service postgresql-9.4 initdb
Initializing database:                                     [  OK  ]

# サービス起動
# service postgresql-9.4 start
Starting postgresql-9.4 service:                           [  OK  ]

# パスワード設定
# su - postgres
-bash-4.1$ psql
psql (9.4.12)
Type "help" for help.

postgres=# alter user postgres with password '*****';
ALTER ROLE
postgres=# \q

# postgresql.confの設定
# vi /var/lib/pgsql/8.4/data/postgresql.conf
# --- postgresqlの時刻合わせ
timezone = 'Asia/Tokyo'
# --- 他からのアクセスを許可
listen_addresses = '*'
port = 5432

# pg_hba.confの設定
# vi var/lib/pgsql/9.4/data/pg_hba.conf
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all             all             192.168.56.0/24         trust
# IPv6 local connections:
host    all             all             ::1/128                 ident

ポート5432を開くためにiptablesを編集

#iptablesに追加
-A INPUT -p tcp --dport 5432 -j ACCEPT

iptablesを再起動

# /etc/rc.d/init.d/iptables restart

データベースの作成とテーブル作成とユーザー権限について

--ユーザー作成
CREATE ROLE webrole LOGIN;
CREATE ROLE nobody  LOGIN;

--データベース作成
CREATE DATABASE testdb WITH TEMPLATE = template0 ENCODING = 'UTF8';
ALTER DATABASE testdb OWNER TO webrole;

--テーブル作成
CREATE TABLE t_img_vote
(
  id serial NOT NULL, -- シーケンス
  pen_nm character varying(256), -- ペンネーム
  illust_nm character varying(128), -- 作品名
  email character varying(256), -- メールアドレス
  open_flg boolean NOT NULL DEFAULT false, -- 公開フラグ(0:非公開 1:公開)
  img_nm character varying(256), -- 画像ファイル名
  ip_addr character varying(64), -- IPアドレス
  vote_at timestamp without time zone DEFAULT now(), -- 投稿日時
  created_at timestamp without time zone DEFAULT now(), -- 作成日時
  update_at timestamp without time zone DEFAULT now(), -- 更新日時
  CONSTRAINT t_img_vote_pkey PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);

ALTER TABLE t_img_vote
  OWNER TO webrole;
COMMENT ON COLUMN t_img_vote.id IS 'シーケンス';
COMMENT ON COLUMN t_img_vote.pen_nm IS 'ペンネーム';
COMMENT ON COLUMN t_img_vote.illust_nm IS '作品名';
COMMENT ON COLUMN t_img_vote.email IS 'メールアドレス';
COMMENT ON COLUMN t_img_vote.open_flg IS '公開フラグ(0:非公開 1:公開)';
COMMENT ON COLUMN t_img_vote.img_nm IS '画像ファイル名';
COMMENT ON COLUMN t_img_vote.ip_addr IS 'IPアドレス';
COMMENT ON COLUMN t_img_vote.vote_at IS '投稿日時';
COMMENT ON COLUMN t_img_vote.created_at IS '作成日時';
COMMENT ON COLUMN t_img_vote.update_at IS '更新日時';

CREATE INDEX idx1
  ON t_img_vote
  USING btree
  (open_flg);
  
CREATE INDEX idx2
  ON t_img_vote
  USING btree
  (img_nm);

--権限設定
ALTER TABLE t_img_vote OWNER TO webrole;
GRANT ALL ON TABLE t_img_vote TO webrole;
GRANT SELECT,UPDATE ON TABLE t_img_vote_id_seq TO nobody;
GRANT SELECT,INSERT ON TABLE t_img_vote TO nobody;

hacknote.jp
qiita.com
qiita.com
http://rina.jpn.ph/~rance/linux/postgresql/connect.html