CentOSにPostgreSQLをインストールする

```
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
chrony:x:995:993::/var/lib/chrony:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
sato:x:1000:1000::/home/sato:/bin/bash
```
```
[root@ik1-305-12909 zipfile]# # yum -y install postgresql-server
[root@ik1-305-12909 zipfile]#  yum -y install postgresql-server
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * epel: mirror.dmmlabs.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
Resolving Dependencies
--> Running transaction check
---> Package postgresql-server.x86_64 0:9.2.23-3.el7_4 will be installed
--> Processing Dependency: postgresql-libs(x86-64) = 9.2.23-3.el7_4 for package: postgresql-server-9.2.23-3.el7_4.x86_64
--> Processing Dependency: postgresql(x86-64) = 9.2.23-3.el7_4 for package: postgresql-server-9.2.23-3.el7_4.x86_64
--> Processing Dependency: libpq.so.5()(64bit) for package: postgresql-server-9.2.23-3.el7_4.x86_64
--> Running transaction check
---> Package postgresql.x86_64 0:9.2.23-3.el7_4 will be installed
---> Package postgresql-libs.x86_64 0:9.2.23-3.el7_4 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

====================================================================================================================
 Package                          Arch                  Version                        Repository              Size
====================================================================================================================
Installing:
 postgresql-server                x86_64                9.2.23-3.el7_4                 updates                3.8 M
Installing for dependencies:
 postgresql                       x86_64                9.2.23-3.el7_4                 updates                3.0 M
 postgresql-libs                  x86_64                9.2.23-3.el7_4                 updates                234 k

Transaction Summary
====================================================================================================================
Install  1 Package (+2 Dependent packages)

Total download size: 7.0 M
Installed size: 33 M
Downloading packages:
(1/3): postgresql-libs-9.2.23-3.el7_4.x86_64.rpm                                             | 234 kB  00:00:00
(2/3): postgresql-9.2.23-3.el7_4.x86_64.rpm                                                  | 3.0 MB  00:00:02
(3/3): postgresql-server-9.2.23-3.el7_4.x86_64.rpm                                           | 3.8 MB  00:00:02
--------------------------------------------------------------------------------------------------------------------
Total                                                                               2.6 MB/s | 7.0 MB  00:00:02
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
```
```
postgresql.confを編集するために、バックアップファイルを作る。
cp postgresql.conf postgresql.conf.org
postgresql.confの最終行に追記する。
echo "listen_addresses = '*'" >> /var/lib/pgsql/data/postgresql.conf
```
```
postgresqlをリスタートする
bash-4.2$ cp postgresql.conf postgresql.conf.org
bash-4.2$ echo "listen_addresses = '*'" >> /var/lib/pgsql/data/postgresql.conf
bash-4.2$ cp pg_hba.conf pg_hba.conf.org
bash-4.2$ echo "# PostgreSQL Client Authentication Configuration File" >  ./pg_hba.conf
bash-4.2$ echo "# ===================================================" >> ./pg_hba.conf
bash-4.2$ echo "local all all              trust"                      >> ./pg_hba.conf
bash-4.2$ echo "host  all all 127.0.0.1/32 trust"                      >> ./pg_hba.conf
bash-4.2$ echo "host  all all ::1/128      trust"                      >> ./pg_hba.conf
bash-4.2$ exit
exit
[root@ik1-305-12909 zipfile]# service postgresql restart
Redirecting to /bin/systemctl restart  postgresql.service
```
```
postgresqlにログイン
# psql -U postgres
Dataベースのリストを見る
postgres=# \l
                             List of databases
   Name    |  Owner   | Encoding  | Collate | Ctype |   Access privileges
-----------+----------+-----------+---------+-------+-----------------------
 postgres  | postgres | SQL_ASCII | C       | C     |
 template0 | postgres | SQL_ASCII | C       | C     | =c/postgres          +
           |          |           |         |       | postgres=CTc/postgres
 template1 | postgres | SQL_ASCII | C       | C     | =c/postgres          +
           |          |           |         |       | postgres=CTc/postgres
(3 rows)
```
```
新たにsalesというDataベースをつくる
postgres=# create database sales
postgres-# ;
CREATE DATABASE
postgres=# \l
                             List of databases
   Name    |  Owner   | Encoding  | Collate | Ctype |   Access privileges
-----------+----------+-----------+---------+-------+-----------------------
 postgres  | postgres | SQL_ASCII | C       | C     |
 sales     | postgres | SQL_ASCII | C       | C     |
 template0 | postgres | SQL_ASCII | C       | C     | =c/postgres          +
           |          |           |         |       | postgres=CTc/postgres
 template1 | postgres | SQL_ASCII | C       | C     | =c/postgres          +
           |          |           |         |       | postgres=CTc/postgres
(4 rows)
```
```
テーブルをつくる
postgres=# insert into userlist values(1,    'sato','tokyo',18);
INSERT 0 1
postgres=# insert into userlist values(2,'nao','kyoto',22);
INSERT 0 1
postgres=# insert into userlist values(3,'john','newyork',34);
INSERT 0 1
postgres=# insert into userlist values(4,'lisa','paris',24);
INSERT 0 1
postgres=# insert into userlist values(5,'kaoru','nagoya',15);
INSERT 0 1
postgres=# insert into userlist values(6,'ryo','fuhuoka',40);
INSERT 0 1
```
```
平均年齢を算出する
postgres=# select avg(age) from userlist;
         avg
---------------------
 25.5000000000000000
(1 row)
```
```
合計の年齢を算出する
postgres=# select sum(age) from userlist;
 sum
-----
 153
(1 row)
```
```
年齢順に表示する
postgres=# select * from userlist order by age ;
 id | name  | address | age
----+-------+---------+-----
  5 | kaoru | nagoya  |  15
  5 | kaoru | nagoya  |  15
  1 | sato  | tokyo   |  18
  1 | sato  | tokyo   |  18
  2 | nao   | kyoto   |  22
  2 | nao   | kyoto   |  22
  4 | lisa  | paris   |  24
  4 | lisa  | paris   |  24
  3 | john  | newyork |  34
  3 | john  | newyork |  34
  6 | ryo   | fuhuoka |  40
  6 | ryo   | fuhuoka |  40
(12 rows)
```
```
20歳から25歳までの平均年齢を算出する
postgres=# select avg(age) from userlist where age between 20 and 25 ;
         avg
---------------------
 23.0000000000000000
(1 row)
```
```
20歳から25歳までの合計年齢を算出する
postgres=# select sum(age) from userlist where age between 20 and 25 ;
 sum
-----
  92
(1 row)
```
```
テーブルuserlistを捨てる
postgres=# drop table userlist;
DROP TABLE
```
```
Dataベースsalesを捨てる
postgres=# drop database sales;
DROP DATABASE
```
```
Postgresqlを終了する
postgres=# \q
[root@ik1-305-12909 home]#
```
```
【実践問題】
奨学金の給付制度により、東京、京都、fuhuokaの内、
人数が5人以上の場合、1人7000円の給付をすることになった。
該当する都市のみテーブルに表示しなさい。
また結果を/home/lisa/data/result4.csvに保存しなさい。
カラムはaddress, count, moneyだけで良い。ただしmoneyの大きい順番で表示すること。

postgres=#  select address,count(*),count(*)*7000 as "money" from userlist where address in ('tokyo','fuhuoka','kyoto')gro
up by address having count(*)>=5 order by count(*) desc;

表示結果は以下の通り
 address | count | money
---------+-------+-------
 tokyo   |    14 | 98000
 fuhuoka |     5 | 35000
(2 rows)
```
```
【実践問題】
東京と京都でイベントを開催することになり、
チラシの配布が必要になった。
ここに住んでいる20代の人に対して、
年齢の20倍のチラシをノルマにしたい。
name, address, age, printのカラムを表示し、
枚数の多い順番で表示しなさい。
ただしprintがチラシの枚数である。

表示コマンドは以下のとおり
postgres=#  select address, age, age*20 as "print" from userlist where (address in ('tokyo','kyoto')) and (age between 20 and 29) order by print desc;

表示結果は以下になる
 address | age | print
---------+-----+-------
 tokyo   |  26 |   520
 tokyo   |  25 |   500
 tokyo   |  25 |   500
 tokyo   |  23 |   460
 tokyo   |  22 |   440
 kyoto   |  22 |   440
 kyoto   |  21 |   420
(7 rows)
```

【実践問題】
東京、京都、名古屋に住んでいる10代の人が
londonに留学することになった。
それに伴い、住所を変更したい。
住所を変更し、name, address, ageを表示しなさい。

表示コマンドは以下の通り
※まず対象者を抽出する。
```
postgres=#  select address, age from userlist where (address in ('tokyo','kyoto','nagoya')) and (age between 10 and 19);
```

対象者が表示される。この場合は3名
```
 address | age
---------+-----
 tokyo   |  18
 nagoya  |  15
 tokyo   |  19
(3 rows)
```

その上で、住所変更措置を下記の通り実行する
```
postgres=# update userlist set address='london' where (address in ('tokyo','kyoto','nagoya')) and (age between 10 and 19);
```
住所が変更された対象者が表示される
```
UPDATE 3
postgres=# select * from userlist where address='london';
 id | name  | address | age
----+-------+---------+-----
  1 | sato  | london  |  18
  5 | kaoru | london  |  15
 18 | nori  | london  |  19
(3 rows)
```