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)