Postgres 初期設定関連  自分用メモ crossfish21

インストールと初期設定

```
rpm -qa | grep postgres   で、インストールされているRPMパッケージを確認しておこう



Postgresql 9.6 のインストールなら
sudo yum install https://yum.postgresql.org/9.6/redhat/rhel-7-x86_64/pgdg-redhat96-9.6-3.noarch.rpm

Postgresql 10.3 のインストールなら
sudo yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-redhat10-10-2.noarch.rpm


でyumパッケージダウンロード
※redhatとCentOS用が存在するみたいだけど、どちらでもいいのかも。RedHatにインストール時は気をつけよう

Postgresql 9.6の場合は
sudo yum install -y postgresql96-server postgresql96-contrib　　でインストール

Postgresql 10.3の場合は
sudo yum install -y postgresql10-server postgresql10-contrib　　でインストール


psql --version　でバージョン確認
psql (PostgreSQL) 9.6.8　　なんて表示されればOK


※以降は10.3で説明する

sudo /usr/pgsql-10/bin/postgresql-10-setup initdb　でDB初期化
Initializing database ... OK　と表示されるはず


systemctl start postgresql-10.service　　でサービス起動


systemctl enable postgresql-10.service　　で自動起動するように設定


sudo passwd postgres　　で、「postgres」ユーザの新しいパスワードを設定
"brownAxe100"  にしておく


su - postgres    で、「postgres」ユーザとしてDBにログイン
-bash-4.2$　　というプロンプトになっているはず


psql    でDBへ接続する。これで標準で用意されているデータベース「postgres」に接続する
postgres=#　　というプロンプトになっているはず(postgresがDB名。接続するDBごとに変わってくる)


create role role21 with login createdb replication password 'yellowAxe200';　　で、Role作成
commmit;   コミットしないと有効にならないらしい
「role21」というROLE名、「yellowAxe200」というパスワードになる
login createdb replication　は、ログインとDB作成とレプリケーションができるRoleという意味


q   でDB切断してみる
-bash-4.2$　　というプロンプトになっているはず


exit　　でログアウトする
プロンプトが通常のものになるはず


su - postgres    で、「postgres」ユーザとしてDBにログイン
-bash-4.2$　　というプロンプトになっているはず


psql -l   でDB一覧を表示


exit　　でログアウトする



新しく作成したroleでpostgresにログインするため、OSのユーザを追加
※はっきりしないが、role名と同じ名前のユーザを用意しないと都合が悪いらしい

useradd role21     でユーザ追加
passwd role21　で、role21のパスワードを設定する
New password: に、パスワードを入力(yellowAxe200)


systemctl stop postgresql-10.service　　でPOSTGRESを終了する


ここまでできれば、一旦はOKだろう
systemctl start postgresql-10.service　　で起動しなおしておこう




※設定ファイルの設定

su -    でrootに変更


cd /var/lib/pgsql/10/data   でディレクトリ移動

postgresql.conf　というファイルを編集


#listen_addresses = 'localhost'　という行は、アクセスを設定している。デフォルトではlocalhostのみ
listen_addresses = '*'　のようにすれば、外部アクセス可能になる


#port = 5432　は、接続ポート。デフォルトは5432
これもport = 8888　などにすれば、変更可能


log_line_prefix = '%m [%p] '　は、ログの出力形式設定
log_line_prefix = '< %t %u %d >'　などにすれば、「日時 ユーザー DB」の形式になる



次に、pg_hba.confを編集

host all all 127.0.0.1/32 ident　　という行の下に
host all all 接続許可するIPアドレス/32 trust　　と追加すれば、外部接続を無条件に許可（パスワード無しに）する
IPアドレスはCIDR表記なので注意。/32を末尾につければ問題ないらしい

※host all all 0.0.0.0/0 trust　とすれば、全てのIPからアクセス可能になるが、これは開発環境のみの設定。本番は絶対NG

とりあえず、以下のようにしておけば無難か。md5形式の暗号化でパスワードを入力する設定

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     md5
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5




※他にも設定は色々とある



systemctl restart postgresql-10.service   で再起動し、設定を反映

```

---

DB作成・テーブル作成

```
[root@tk2-404-43387 local]　　このようにプロンプトが通常の状態で、
su - role21    このコマンドを入力。role21はPostgres用に作成したのユーザ
パスワードを入力


[role21@tk2-404-43387 ~]$　　というプロンプトになるはず。これでrole21でログインしている


psql postgres　　で、データベースpostgresに入る

postgres=>　というプロンプトになっているはず



createdb test01   で「test01」というDBを作成
psql -l   で確認してみる

※データベースの所有者は、作成したユーザになるので注意


psql test01    で、test01に接続
プロンプトが  test01=#  になっているはず


create table table01(id integer not null, name varchar(150) not null,data1 varchar(255),data2 varchar(255)
, primary key(id));
のようにして、テーブル「table01」を作成　　CREATE TABLE　　と表示されるはず


d　　でテーブル一覧を表示し、確認する


このあと、SQL文を普通に入力していけばいい


i /usr/local/sqlFiles/sql.txt　　のようにして、
SQL文を入力したファイルを用意し、それを読み込むことも可能
```

---
role設定　LinuxとWindowsの両方

```
スーパーユーザ
ユーザ名   postgres
pass       brownAxe100




一般ユーザ
ユーザ名   role21
pass       yellowAxe200

create role role21 with login createdb replication password 'yellowAxe200';  で作成

※必ず commmit; を実行しよう。そうしないと権限の設定が正確にならないらしい

データベースは作成したユーザに所有権が与えられるので、スーパーユーザ以外でログインしてDB作成するように
```

---
Winにインストール

[リンク1](https://eng-entrance.com/postgresql-download-install)

---