01_pg_upgrade(コピーモード)を用いたアップデート手順(9.2.4→9.3.2)_2
No

1

概要

対象

ユーザ

PostgreSQLの起動

PostgreSQLサーバ(既存PostgreSQL)

postgresコマンド$ pg_ctl start
server starting.

確認 （確認コマンド等）$ pg_ctl status
pg_ctl: server is running (PID: 23121)/usr/local/pgsql/bin/postgres

備考
pg_upgradeは、単一サーバ上のPostgreSQLのバージョンアップを行うツールです。
そのため、バージョンアップの手順はすべて単一のPostgreSQLサーバ内で実行します。
また本手順書では、既存PostgreSQLと新規PostgreSQLに対して行う作業を区別するため、「対象」カラム内に括弧書きで既存PostgreSQL、新規PostgreSQLのいずれかを記載しています。

psql (9.2.4)
Type "help" for help.
postgres=# select version();2

PostgreSQLのバージョン確認

PostgreSQLサーバ(既存PostgreSQL)

postgres3

JdbcRunnerのインストール

任意のサーバ

任意

4

検証用データベースの作成

PostgreSQLサーバ(既存PostgreSQL)

version------------------------------------------------------------------------------------------------------------PostgreSQL 9.2.4 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.4.7 20120
313 (Red Hat 4.4.7-4), 64-bit(1 row)
JdbcRunnerのインストールは、「別紙_01_付帯ツールのインストール手順」を参照して下さい。

$ createdb tpcc

$ psql -l$ export CLASSPATH=$CLASSPATH: JdbcRunnerを展開したディレクトリ/jdbcrunner-1.2.jar

List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges-----------+----------+----------+---------+-------+----------------------postgres | postgres | UTF8 | C|C |template0 | postgres | UTF8 | C| C | =c/postgres
+
|
|
|
|
| postgres=CTc/postgres
template1 | postgres | UTF8 | C| C | =c/postgres
+
|
|
|
|
| postgres=CTc/postgres
tpcc| postgres | UTF8 | C|C |$ psql -d tpcc

postgres5

検証用データの投入

任意のサーバ

任意

6

検証用データの件数確認

PostgreSQLサーバ(既存PostgreSQL)

postgres-$ java JR JdbcRunnerを展開したディレクトリ/scripts/tpcc_load.js -jdbcDriver org.postgresql.Driver -jdbcUrl
tpcc=# \djdbc:postgresql://PostgreSQLサーバのIPアドレス:5432/tpcc -jdbcPass postgres -jdbcUser postgres -logDir 任意
List of relationsのログ出力ディレクトリ
Schema | Name | Type | Owner--------+------------+-------+---------public | customer | table | postgres
Public | district | table | postgres
public | history | table | postgres
public | item
| table | postgres
public | new_orders | table | postgres
public | order_line | table | postgres
public | orders | table | postgres
public | stock| table | postgres
public | warehouse | table | postgres
count
検証用データの入力確認のため、以下のSQL文を実行-------480000$ psql -d tpcc
(1 row)=# select count(*) from customer;count=# select count(*) from district;=# select count(*) from history;------160=# select count(*) from item;=# select count(*) from new_orders;(1 row)=# select count(*) from order_line;count=# select count(*) from orders;=# select count(*) from stock;-------490069=# select count(*) from warehouse;(1 row)count-------100000(1 row)count-------143969(1 row)count--------4902352(1 row)count-------489967(1 row)count--------1600000(1 row)

7

PostgreSQLの停止

PostgreSQLサーバ(既存PostgreSQL)

postgres8

データベースクラスタの退避

PostgreSQLサーバ(既存PostgreSQL)

postgres9

バイナリの退避

PostgreSQLサーバ(既存PostgreSQL)

root

10

PostgreSQL 9.3.2のインストー PostgreSQLサーバ
ル準備(新規PostgreSQL)$ pg_ctl stop
waiting for server to shut down.... done
server stopped$ pg_ctl status
pg_ctl: no server running$ mv /home/postgres/data/ /home/postgres/data_9.2# mv /usr/local/pgsql /usr/local/pgsql_9.2# ls -l /home/postgres/data_9.2/
合計 96-rw-------. 1 postgres postgres 4 2月 24 16:33 2014 PG_VERSION-rw-------. 1 postgres postgres 188 2月 24 16:22 2014 backup_label.old
drwx------. 9 postgres postgres 4096 2月 28 16:22 2014 basedrwx------. 2 postgres postgres 4096 3月 13 18:52 2014 global(省略)# ls -l /usr/local/ | grep pgsql

PostgreSQLのインストールは、「別紙_00_PostgreSQLインストール手順」を参照して下さい。

-$ cd /usr/local/src/postgresql-9.3.2/contrib/pg_upgrade$ make-root

11 pg_upgradeのコンパイル

PostgreSQLサーバ(新規PostgreSQL)

postgres12 pg_upgradeのインストール

PostgreSQLサーバ(新規PostgreSQL)

root※PostgreSQLインストール時に、contribモジュールもインストールしている場合は、項番11～14の手順は不要# cd /usr/local/src/postgresql-9.3.2/contrib/pg_upgrade# make install13

pg_upgrade_supportのコンパイル

14pg_upgrade_supportのインス PostgreSQLサーバ
トール(新規PostgreSQL)

root

15

データベースクラスタ格納ディレクトリの作成

PostgreSQLサーバ(新規PostgreSQL)

postgres

16 データベースクラスタの作成

PostgreSQLサーバ(新規PostgreSQL)

postgres17 環境変数の設定

PostgreSQLサーバ(新規PostgreSQL)

postgres18

PostgreSQLサーバ(新規PostgreSQL)

pg_upgradeによるデータ移行 PostgreSQLサーバの可否確認(新規PostgreSQL)

drwxr-xr-x. 6 postgres postgres 4096 2月 24 15:08 2014 pgsql_9.2# su – postgres$ pg_upgrade -h
pg_upgrade upgrades a PostgreSQL cluster to a different major version.
Usage:
pg_upgrade [OPTION]...

$ cd /usr/local/src/postgresql-9.3.2/contrib/pg_upgrade_support/$ make(省略)-# cd /usr/local/src/postgresql-9.3.2/contrib/pg_upgrade_support/# make install-# mkdir /home/postgres/data/# chown postgres:postgres /home/postgres/data/# ls -l /home/postgres/data
合計 0$ initdb -E UTF-8 --pgdata=/home/postgres/data/ --no-locale$ ls -l /home/postgres/data
合計 88-rw-------. 1 postgres postgres 4 3月 13 19:45 2014 PG_VERSION
drwx------. 5 postgres postgres 4096 3月 13 19:45 2014 basedrwx------. 2 postgres postgres 4096 3月 13 19:45 2014 global
drwx------. 2 postgres postgres 4096 3月 13 19:45 2014 pg_clog(省略)-postgrespostgres(データベースクラスタ作成時のオプションは、前バージョンでの値に合わせる)$ export PGDATAOLD=/home/postgres/data_9.2/$ export PGDATANEW=/home/postgres/data/$ export PGBINOLD=/usr/local/pgsql_9.2/bin/$ export PGBINNEW=/usr/local/pgsql/bin/$ date; pg_upgrade -c ;date
2014年 3月 13日 木曜日 20:02:12 JST
Performing Consistency Checks----------------------------Checking cluster versions
ok
Checking database user is a superuser
okChecking for prepared transactions
ok
Checking for reg* system OID user data types
okChecking for contrib/isn with bigint-passing mismatchok
Checking for presence of required libraries
ok
Checking database user is a superuser
okChecking for prepared transactions
ok-*Clusters are compatible*
2014年 3月 13日 木曜日 20:02:16 JST$ date ; pg_upgrade ;date;2014年 3月 13日 木曜日 20:03:04 JST
Performing Consistency Checks----------------------------Checking cluster versions
ok
Checking database user is a superuser
okChecking for prepared transactions
ok
Checking for reg* system OID user data types
okChecking for contrib/isn with bigint-passing mismatchokCreating dump of global objects
okCreating dump of database schemas
okChecking for presence of required libraries
ok
Checking database user is a superuser
okChecking for prepared transactionsok-

If pg_upgrade fails after this point, you must re-initdb the
new cluster before continuing.

19

pg_upgradeによるデータ移行 PostgreSQLサーバ(コピーモード)(新規PostgreSQL)

postgres

Performing Upgrade-----------------Analyzing all rows in the new clusterokFreezing all rows on the new cluster
ok
Deleting files from new pg_clog
okCopying old pg_clog to new serverokSetting next transaction ID for new cluster
ok
Setting oldest multixact ID on new clusterok
Resetting WAL archives
okSetting frozenxid counters in new clusterok
Restoring global objects in the new clusterokAdding support functions to new clusterok
Restoring database schemas in the new clusterokRemoving support functions from new clusterok
Copying user relation files
okSetting next OID for new clusterok
Sync data directory to diskokCreating script to analyze new clusterokCreating script to delete old clusterokUpgrade Complete---------------Optimizer statistics are not transferred by pg_upgrade so,once you start the new server, consider running:
analyze_new_cluster.sh

20 PostgreSQL起動

PostgreSQLサーバ(新規PostgreSQL)

postgres

Running this script will delete the old cluster's data files:
delete_old_cluster.sh$ pg_ctl
start
2014年starting
3月 13日 木曜日 20:03:35 JST
server$ psqlpsql (9.3.2)
Type "help" for help.

21 PostgreSQLのバージョン確認

PostgreSQLサーバ(新規PostgreSQL)

postgres=# select version();postgres

22 VACUUMの実施

PostgreSQLサーバ(新規PostgreSQL)

postgres23 ANALYZEの実施

PostgreSQLサーバ(新規PostgreSQL)

postgres$ pg_ctl status
pg_ctl: server is running (PID: 1395)/usr/local/pgsql/bin/postgres-

version------------------------------------------------------------------------------------------------------------PostgreSQL 9.3.2 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.4.7 20120
313 (Red Hat 4.4.7-4), 64-bit(1 row)$ psql tpcc=# \timing
Timing is on.
=# VACUUM VERBOSE;(省略)
DETAIL: 0 dead row versions cannot be removed yet.
There were 0 unused item pointers.
0 pages are entirely empty.
CPU 0.00s/0.00u sec elapsed 0.00 sec.
VACUUM$ psql tpcc=# \timing
Timing is on.
=# ANALYZE VERBOSE;(省略)
ANALYZE
Time: 11473.994 ms
データ確認のため、以下のSQL文を実行
select count(*) from customer;
select count(*) from district;select count(*) from history;
select count(*) from item;
select count(*) from new_orders;select count(*) from order_line;
select count(*) from orders;select count(*) from stock;
select count(*) from warehouse;

-

-

count
-------480000(1 row)count------160(1 row)count-------980138(1 row)count-------100000(1 row)

24 検証用データの件数確認

PostgreSQLサーバ(新規PostgreSQL)

count-------143969(1 row)

postgrescount--------4902352(1 row)count-------489967(1 row)count--------1600000(1 row)$ export CLASSPATH=$CLASSPATH: JdbcRunnerを展開したディレクトリ/jdbcrunner-1.2.jar

count--------$ java JR JdbcRunnerを展開したディレクトリ/scripts/tpcc_load.js -jdbcDriver org.postgresql.Driver -jdbcUrl
jdbc:postgresql://PostgreSQLサーバのIPアドレス:5432/tpcc -jdbcPass postgres -jdbcUser postgres -logDir 任意のログ出力ディレクトリ

25 JdbcRunnerの実行

任意のサーバ

既存PostgreSQLのアンインス PostgreSQLサーバ
26
トール(既存PostgreSQL)

任意

20:12:53 [INFO ] > JdbcRunner 1.2
20:12:53 [INFO ] [Config]
Program start time : 20140313-201252
Script filename: /usr/local/jdbcrunner-1.2/scripts/tpcc.js
JDBC driver: org.postgresql.Driver
JDBC URL: jdbc:postgresql://localhost:5432/tpcc
JDBC user: postgres
Warmup time
: 300 sec
Measurement time : 900 sec
Number of tx types : 5（中略）#
cd /usr/local/src/postgresql-9.2.4# make uninstall

-

root

ページ 1

バージョンアップツールの利用（pg_upgrade）(9.2.4→9.3.2)
No

1

2

3

4

概要

対象

ユーザ

PostgreSQLの起動

PostgreSQLサーバ(既存PostgreSQL)

postgres

PostgreSQLのバージョン確認

JdbcRunnerのインストール

検証用データベースの作成

PostgreSQLサーバ(既存PostgreSQL)

任意のサーバ

PostgreSQLサーバ(既存PostgreSQL)

コマンド$ pg_ctl start
server starting.

確認 （確認コマンド等）$ pg_ctl status
pg_ctl: server is running (PID: 23121)/usr/local/pgsql/bin/postgres$ psqlpsql (9.2.4)
Type "help" for help.

-

検証用データの投入

任意のサーバ

また本手順書では、既存PostgreSQLと新規PostgreSQLに対して行う作業を区別するため、「対象」カラム内に括弧書きで既存PostgreSQL、新規PostgreSQLのいずれかを記載しています。

postgres=# select version();versionpostgres------------------------------------------------------------------------------------------------------------PostgreSQL 9.2.4 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.4.7 20120
313 (Red Hat 4.4.7-4), 64-bit(1 row)
JdbcRunnerのインストールは、「別紙_01_付帯ツールのインストール手順」を参照して下さい。

-$ createdb tpcc

$ psql -l

任意

List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges-----------+----------+----------+---------+-------+----------------------postgres | postgres | UTF8 | C|C |template0 | postgres | UTF8 | C| C | =c/postgres
+
|
|
|
|
| postgres=CTc/postgres
template1 | postgres | UTF8 | C| C | =c/postgres
+
|
|
|
|
| postgres=CTc/postgres
tpcc| postgres | UTF8 | C|C |(4 rows)

postgres$ export CLASSPATH=$CLASSPATH: JdbcRunnerを展開したディレクトリ/jdbcrunner-1.2.jar

5

備考
pg_upgradeは、単一サーバ上のPostgreSQLのバージョンアップを行うツールです。
そのため、バージョンアップの手順はすべて単一のPostgreSQLサーバ内で実行します。

任意$ psql -d tpcc

$ java JR JdbcRunnerを展開したディレクトリ/scripts/tpcc_load.js -jdbcDriver org.postgresql.Driver -jdbcUrl
tpcc=# \djdbc:postgresql://PostgreSQLサーバのIPアドレス:5432/tpcc -jdbcPass postgres -jdbcUser postgres -logDir 任意
List of relationsのログ出力ディレクトリ
Schema | Name | Type | Owner--------+------------+-------+---------public | customer | table | postgres
Public | district | table | postgres
public | history | table | postgres
public | item
| table | postgres
public | new_orders | table | postgres
public | order_line | table | postgres
public | orders | table | postgres
public | stock| table | postgres
public | warehouse | table | postgres(9 rows)
検証用データの入力確認のため、以下のSQL文を実行$ psql -d tpcc=# select count(*) from customer;=# select count(*) from district;=# select count(*) from history;=# select count(*) from item;=# select count(*) from new_orders;=# select count(*) from order_line;=# select count(*) from orders;=# select count(*) from stock;=# select count(*) from warehouse;count-------480000(1 row)count------160(1 row)count-------490069(1 row)count-------100000(1 row)

6

検証用データの件数確認

PostgreSQLサーバ(既存PostgreSQL)

count-------143969(1 row)

postgrescount--------4902352(1 row)count-------489967(1 row)count--------1600000(1 row)count------$ pg_ctl status
pg_ctl: no server running$ pg_ctl stop
waiting for server to shut down.... done
server stopped
7

PostgreSQLの停止

PostgreSQLサーバ(既存PostgreSQL)

postgres8

データベースクラスタの退避

PostgreSQLサーバ(既存PostgreSQL)

postgres9

バイナリの退避

PostgreSQLサーバ(既存PostgreSQL)

root# mv /usr/local/pgsql /usr/local/pgsql_9.2# ls -l /home/postgres/data_9.2/
合計 96-rw-------. 1 postgres postgres 4 2月 24 16:33 2014 PG_VERSION-rw-------. 1 postgres postgres 188 2月 24 16:22 2014 backup_label.old
drwx------. 9 postgres postgres 4096 2月 28 16:22 2014 basedrwx------. 2 postgres postgres 4096 3月 13 18:52 2014 global(省略)# ls -l /usr/local/ | grep pgsql

PostgreSQLのインストールは、「別紙_00_PostgreSQLインストール手順」を参照して下さい。

-$ cd /usr/local/src/postgresql-9.3.2/contrib/pg_upgrade$ make-$ mv /home/postgres/data/ /home/postgres/data_9.2

10

PostgreSQL 9.3.2のインストー PostgreSQLサーバ
ル準備(新規PostgreSQL)

drwxr-xr-x. 6 postgres postgres 4096 2月 24 15:08 2014 pgsql_9.2

root

11 pg_upgradeのコンパイル

PostgreSQLサーバ(新規PostgreSQL)

postgres12 pg_upgradeのインストール

PostgreSQLサーバ(新規PostgreSQL)

root※PostgreSQLインストール時に、contribモジュールもインストールしている場合は、項番11～14の手順は不要# cd /usr/local/src/postgresql-9.3.2/contrib/pg_upgrade# make install13

pg_upgrade_supportのコンパイル

14pg_upgrade_supportのインス PostgreSQLサーバ
トール(新規PostgreSQL)

root

15

データベースクラスタ格納ディレクトリの作成

PostgreSQLサーバ(新規PostgreSQL)

postgres

16 データベースクラスタの作成

PostgreSQLサーバ(新規PostgreSQL)

postgres17 環境変数の設定

PostgreSQLサーバ(新規PostgreSQL)

postgres18

PostgreSQLサーバ(新規PostgreSQL)

pg_upgradeによるデータ移行 PostgreSQLサーバの可否確認(新規PostgreSQL)# su – postgres$ pg_upgrade -h
pg_upgrade upgrades a PostgreSQL cluster to a different major version.
Usage:
pg_upgrade [OPTION]...

$ cd /usr/local/src/postgresql-9.3.2/contrib/pg_upgrade_support/$ make(省略)-# cd /usr/local/src/postgresql-9.3.2/contrib/pg_upgrade_support/# make install-# mkdir /home/postgres/data/# ls -l /home/postgres/data
合計 0$ initdb -E UTF-8 --pgdata=/home/postgres/data/ --no-locale$ ls -l /home/postgres/data
合計 88-rw-------. 1 postgres postgres 4 3月 13 19:45 2014 PG_VERSION
drwx------. 5 postgres postgres 4096 3月 13 19:45 2014 basedrwx------. 2 postgres postgres 4096 3月 13 19:45 2014 global
drwx------. 2 postgres postgres 4096 3月 13 19:45 2014 pg_clog(省略)-postgrespostgres(データベースクラスタ作成時のオプションは、前バージョンでの値に合わせる)$ export PGDATAOLD=/home/postgres/data_9.2/$ export PGDATANEW=/home/postgres/data/$ export PGBINOLD=/usr/local/pgsql_9.2/bin/$ export PGBINNEW=/usr/local/pgsql/bin/$ date; pg_upgrade -c ;date
2014年 3月 13日 木曜日 20:02:12 JST
Performing Consistency Checks----------------------------Checking cluster versions
ok
Checking database user is a superuser
okChecking for prepared transactions
ok
Checking for reg* system OID user data types
okChecking for contrib/isn with bigint-passing mismatchok
Checking for presence of required libraries
ok
Checking database user is a superuser
okChecking for prepared transactions
ok-*Clusters are compatible*
2014年 3月 13日 木曜日 20:02:16 JST$ date ; pg_upgrade --link ;date
2014年 3月 18日 火曜日 20:12:32 JST
Performing Consistency Checks----------------------------Checking cluster versions
ok
Checking database user is a superuser
okChecking for prepared transactions
ok
Checking for reg* system OID user data types
okChecking for contrib/isn with bigint-passing mismatchokCreating dump of global objects
okCreating dump of database schemas
okChecking for presence of required libraries
ok
Checking database user is a superuser
okChecking for prepared transactionsok-

If pg_upgrade fails after this point, you must re-initdb the
new cluster before continuing.

19

pg_upgradeによるデータ移行 PostgreSQLサーバ(ハードリンクモード)(新規PostgreSQL)

postgres

Performing Upgrade-----------------Analyzing all rows in the new clusterokFreezing all rows on the new cluster
ok
Deleting files from new pg_clog
okCopying old pg_clog to new serverokSetting next transaction ID for new cluster
ok
Setting oldest multixact ID on new clusterok
Resetting WAL archives
okSetting frozenxid counters in new clusterok
Restoring global objects in the new clusterokAdding support functions to new clusterok
Restoring database schemas in the new clusterokRemoving support functions from new clusterokAdding ".old" suffix to old global/pg_controlok
If you want to start the old cluster, you will need to removethe ".old" suffix from /home/postgres/data_9.2/global/pg_control.old.
Because "link" mode was used, the old cluster cannot be safely
started once the new cluster has been started.
Linking user relation files

okSetting next OID for new cluster
Sync data directory to disk
Creating script to analyze new cluster
Creating script to delete old cluster

ok

ok
ok
ok

Upgrade Complete---------------Optimizer statistics are not transferred by pg_upgrade so,once you start the new server, consider running:
analyze_new_cluster.shRunning this script will delete the old cluster's data files:
delete_old_cluster.sh
2014年 3月 18日 火曜日 20:12:42 JST
2014年 3月 13日 木曜日 20:03:35 JST
20 PostgreSQL起動

PostgreSQLサーバ(新規PostgreSQL)

postgres$ pg_ctl status
pg_ctl: server is running (PID: 1395)/usr/local/pgsql/bin/postgres-$ pg_ctl start
server starting$ psqlpsql (9.3.2)
Type "help" for help.

21 PostgreSQLのバージョン確認

22 VACUUMの実施

23 ANALYZEの実施

PostgreSQLサーバ(新規PostgreSQL)

PostgreSQLサーバ(新規PostgreSQL)

PostgreSQLサーバ(新規PostgreSQL)

postgres=# select version();postgrespostgresversion------------------------------------------------------------------------------------------------------------PostgreSQL 9.3.2 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.4.7 20120
313 (Red Hat 4.4.7-4), 64-bit(1 row)$ psql tpcc=# \timing
Timing is on.
=# VACUUM VERBOSE;(省略)
DETAIL: 0 dead row versions cannot be removed yet.
There were 0 unused item pointers.
0 pages are entirely empty.
CPU 0.00s/0.00u sec elapsed 0.00 sec.
VACUUM
Time: 890.638 msnsider increasing the configuration parameter "checkpoint_segments".
$ psql tpcc=# \timing
Timing is on.
=# ANALYZE VERBOSE;(省略)
ANALYZE
Time: 11473.994 ms--

postgres

データ確認のため、以下のSQL文を実行$ psql -d tpcc=# select count(*) from customer;=# select count(*) from district;=# select count(*) from history;=# select count(*) from item;=# select count(*) from new_orders;=# select count(*) from order_line;=# select count(*) from orders;=# select count(*) from stock;=# select count(*) from warehouse;count-------480000(1 row)count------160(1 row)count-------980138(1 row)count-------100000(1 row)

24 検証用データの件数確認

PostgreSQLサーバ(新規PostgreSQL)

postgrescount-------143969(1 row)count--------4902352(1 row)count-------489967(1 row)count--------1600000(1 row)count------16(1 row)
ページ 2

バージョンアップツールの利用（pg_upgrade）(9.2.4→9.3.2)$ export CLASSPATH=$CLASSPATH: JdbcRunnerを展開したディレクトリ/jdbcrunner-1.2.jar-$ java JR JdbcRunnerを展開したディレクトリ/scripts/tpcc_load.js -jdbcDriver org.postgresql.Driver -jdbcUrl
jdbc:postgresql://PostgreSQLサーバのIPアドレス:5432/tpcc -jdbcPass postgres -jdbcUser postgres -logDir 任意のログ出力ディレクトリ

25 JdbcRunnerの実行

任意のサーバ任意

20:12:53 [INFO ] > JdbcRunner 1.2
20:12:53 [INFO ] [Config]
Program start time : 20140313-201252
Script filename: /usr/local/jdbcrunner-1.2/scripts/tpcc.js
JDBC driver: org.postgresql.Driver
JDBC URL: jdbc:postgresql://localhost:5432/tpcc
JDBC user: postgres
Warmup time
: 300 sec
Measurement time : 900 sec
Number of tx types : 5（中略）

ページ 3