PostgreSQLにデータをインポートする

この記事では、pgAdmin4を使用してCSVファイルからデータをPostgreSQLデータベースにインポートする手順について紹介しています。
今回は、気象庁からダウンロードしたアメダス観測データをテーブルに登録することを前提として解説しています。
気象庁のアメダス観測データは、こちらからダウンロードすることができます。
今回利用するPostgreSQLは、PodmanのPOD内に構築したデータベースサーバ上に構築したものを利用しています。
コンテナによるデータベースサーバの構築方法、pgAdmin4のインストールやデータベースの作成手順については、以下で詳しく解説しています。
目次
PostgreSQLのデータベースを作成する
PostgreSQLのデータベースは、コマンドラインからの操作のほかに、pgAdmin4というPostgreSQL専用のGUI管理ツールを利用して操作することができます。
今回は、pgAdmin4を使ってデータベース、スキーマやテーブルを作成していきます。
データベースユーザを作成する
pgAdmin4の管理画面にログインします。作成済みのデータベースを右クリックして「作成」→「ログイン/グループロール」を選択します。

「General」タブの「名前」に新規に追加するデータベースユーザ名を入力します。

次に「権限」タブをクリックして「ログイン属性」トグルスイッチをオンにします。設定が完了したら「保存」ボタンを押します。

また、「定義」タブをクリックして、「パスワード」に作成するデータベースユーザのパスワードを設定します。パスワードは、後から変更することができます。
新規に作成したデータベースユーザが追加されたことを確認します。

データベースを作成する
データベースを右クリックして、「作成」→「データベース」を選択します。

「General」タブの「データベース」に新規に追加するデータベース名を入力します。「所有者」に先ほど追加したユーザを指定します。設定が完了したら「保存」ボタンを押します。
なお、データベース名は小文字で設定します。PostgreSQLはSQL発行時に大文字を小文字に変換してしまうため、検索エラーが発生します。
スキーマ名、テーブル名やカラム名についても同様に小文字で設定しましょう。

新規に作成したデータベースが追加されたことを確認します。

データベーススキーマを作成する
スキーマを右クリックして、「作成」→「スキーマ」を選択します。

「General」タブの「名前」に新規に追加するデータベーススキーマ名を入力します。「所有者」に先ほど追加したユーザを指定します。設定が完了したら「保存」ボタンを押します。

新規に作成したデータベーススキーマが追加されたことを確認します。

テーブルを作成する
テーブルを右クリックして、「作成」→「テーブル」を選択します。

「General」タブの「名前」に新規に追加するテーブル名を入力します。「所有者」に先ほど追加したユーザを指定します。

次に「列」タブをクリックして、テーブルを構成するカラムを設定します。設定が完了したら「保存」ボタンを押します。

新規に作成したテーブルとカラム(列)が追加されたことを確認します。

PostgreSQLにデータをインポートする
気象庁のホームページから取得したアメダス観測データは、CSVファイルでダウンロードできます。Excelなどで開くと以下のようなデータが記録されています。

CSVファイルを編集して、先ほど作成したテーブルのカラム名を1行目に追加したのち保存します。

データをインポートする
データをインポートするテーブルを右クリックして、「データをインポート/エクスポート」を選択します。

「一般」タブの「エンコーディング」はSJISを選択し、フォルダアイコンをクリックします。

右上の「…」ボタンをクリックし、アップロードを選択します。

左側の赤枠にファイルをドロップします。「Uploaded!」が表示されたら、右上の「×」ボタンをクリックします。

次に「オプション」タブをクリックして、「ヘッダ」トグルスイッチをオンにします。設定が完了したら「OK」ボタンを押します。

「プロセスを開始しました」と「プロセスが完了しました」が表示されたらデータのインポートは終了です。

インポートしたデータを確認する
左側のテーブルを選択して、画面上部に配置されている「すべての行」ボタンをクリックすると、インポートしたデータの検索結果が表示されます。

コマンドラインでデータを検索する
最後にコマンドラインからテーブルのデータを検索してみます。PostgreSQLのクライアントツールがインストールされているサーバやPCからデータベースに接続します。
# psql -h 192.168.11.220 -p 5432 -U workuser -d test_database
Password for user workuser:
psql (15.6)
Type "help" for help.
test_database=>
テーブルのデータを検索します。
test_database=> select * from obsdata.amedas;
ymdi | tempc | precip | prec_flag | wspd | wdir | dewpc | relhum
---------------------+-------+--------+-----------+------+--------+-------+--------
2024-02-01 01:00:00 | 9.3 | 0 | 1 | 1.1 | 北 | 1.9 | 60
2024-02-01 02:00:00 | 8.9 | 0 | 0 | 1.5 | 北西 | 2.3 | 63
2024-02-01 03:00:00 | 8.9 | 0 | 0 | 2.5 | 北北西 | 0.9 | 57
2024-02-01 04:00:00 | 8.6 | 0 | 0 | 2.2 | 北北西 | 1.3 | 60
2024-02-01 05:00:00 | 8.2 | 0 | 0 | 1.3 | 北 | 1.6 | 63
2024-02-01 06:00:00 | 8.4 | 0 | 0 | 1.9 | 北北西 | 1.1 | 60
2024-02-01 07:00:00 | 8.3 | 0 | 1 | 2.1 | 北北西 | 1.9 | 64
・・・途中省略・・・
2024-02-29 19:00:00 | 9 | 0 | 0 | 1.2 | 北 | 4.8 | 75
2024-02-29 20:00:00 | 8.3 | 0 | 0 | 2.8 | 北東 | 5.9 | 85
2024-02-29 21:00:00 | 7.6 | 0.5 | 0 | 1.2 | 北北東 | 7 | 96
2024-02-29 22:00:00 | 7.2 | 1 | 0 | 2 | 東北東 | 6.6 | 96
2024-02-29 23:00:00 | 7.2 | 0.5 | 0 | 2.2 | 北 | 6.6 | 96
2024-03-01 00:00:00 | 7 | 2 | 0 | 3.7 | 北東 | 6.7 | 98
(696 rows)
test_database=>
次に特定の日時のデータを検索してみます。
test_database=> select * from obsdata.amedas where ymdi = '2024-02-15 09:00:00';
ymdi | tempc | precip | prec_flag | wspd | wdir | dewpc | relhum
---------------------+-------+--------+-----------+------+--------+-------+--------
2024-02-15 09:00:00 | 13.3 | 0 | 1 | 1.4 | 南南東 | 4.2 | 54
(1 row)
test_database=>
データベースを切断して終了します。
test_database=> \q
まとめ
今回は、PostgreSQL専用のGUI管理ツールであるpgAdmin4を使用して、気象庁から取得したアメダス観測データをPostgreSQLデータベースのテーブルにインポートする手順について紹介しました。
表計算ソフトウェアであるエクセルを使用することで、ほとんどのデータ処理は可能ですが、データの整合性の低さや大規模データの処理には向かないというデメリットがあります。
一方、データベースについては導入・管理や学習コストが高いというデメリットがありますが、データの整合性や正確性が高く、大規模データに対しても高度なクエリを実行できるという利点があります。
また、複数のユーザーが同時にテーブルにアクセスできることもメリットであり、大規模データを機械学習や深層学習などで利用する場合、データベースは欠かせない存在となります。
世界中のシステムにおいて、データベースが重要な役割を担っています。顧客情報や販売時点管理情報(POS)、在庫管理情報など、あらゆる情報の管理にデータベースが活用されています。また、データベースで管理されるデータをAPIで連携して他のシステムなどでも利用されています。
現代のビジネス環境には、様々なデータがあふれています。この膨大なデータの中には貴重な洞察や機会が隠されており、その価値を引き出すためには適切なデータ管理が必要です。
最近では、データを中心に経営戦略を立案し、意思決定を行うデータドリブン経営に注目が集まっています。これまでのビジネスの現場における経営戦略は、経営者のセンスや勘に依存していましたが、最近はビジネスを取り巻く膨大なデータを可視化し、客観性と定量的な視点に基づき意思決定を行うことが重要視されています。
これら経営者の意思決定についてもデータベースの技術が支えています。データベースを使いこなせるようにトレーニングしておくことは非常に重要です。
ご参考になれば幸いです。
システムのお悩みについてご相談ください
SOHOのシステム運用管理に関するお悩みごとについて、なんでもお気兼ねなくご相談ください。
現役システムエンジニアのスタッフが、ボランティアでご相談にご対応させていただきます。