準備
sudo apt install curl ca-certificates gnupg
curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
sudo apt update
PosgreSQLをaptのレポジトリに登録します。
インストール
(base) masaru@ASUS-TUF-Gaming:~$ sudo apt install postgresql
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
postgresql-13 postgresql-client-13 postgresql-client-common
postgresql-common sysstat
提案パッケージ:
postgresql-doc postgresql-doc-13 libjson-perl isag
以下のパッケージが新たにインストールされます:
postgresql postgresql-13 postgresql-client-13 postgresql-client-common
postgresql-common sysstat
アップグレード: 0 個、新規インストール: 6 個、削除: 0 個、保留: 6 個。
15.6 MB のアーカイブを取得する必要があります。
この操作後に追加で 48.1 MB のディスク容量が消費されます。
続行しますか? [Y/n] Y
デフォルトではバージョン13が入るようです。
(base) masaru@ASUS-TUF-Gaming:~$ sudo systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor pr>
Active: active (exited) since Mon 2021-04-05 17:36:05 JST; 6min ago
Main PID: 116889 (code=exited, status=0/SUCCESS)
Tasks: 0 (limit: 37748)
Memory: 0B
CGroup: /system.slice/postgresql.service
4月 05 17:36:05 ASUS-TUF-Gaming systemd[1]: Starting PostgreSQL RDBMS...
4月 05 17:36:05 ASUS-TUF-Gaming systemd[1]: Finished PostgreSQL RDBMS.
無事動いているようです。
PgAdmin 4は未対応の模様
PgAdminはまだUbuntu 21.04に未対応のようです。
(base) masaru@ASUS-TUF-Gaming:~$ sudo apt install pgadmin4
[sudo] masaru のパスワード:
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
パッケージ pgadmin4 は使用できませんが、別のパッケージから参照されます。
これは、パッケージが欠落しているか、廃止されたか、または別のソース
からのみ利用可能であることを意味します。
E: パッケージ 'pgadmin4' にはインストール候補がありません
LANからPostgreSQLに接続可能にする設定
(base) masaru@ASUS-TUF-Gaming:~$ sudo gedit /etc/postgresql/13/main/pg_hba.conf
(base) masaru@ASUS-TUF-Gaming:~$ sudo systemctl restart postgresql
# IPv4 local connections:
host all all 127.0.0.1/32 md5
host all all 192.168.100.1/24 md5
ユーザーの作成
postgres=# create role masaru with superuser login;
select * from pg_shadow;
usename | usesysid | usecreatedb | usesuper | userepl | usebypassrls | passwd | valuntil | useconfig
----------+----------+-------------+----------+---------+--------------+--------+----------+-----------
postgres | 10 | t | t | t | t | | |
masaru | 16384 | f | t | f | f | | |
(2 rows)
postgres=# alter role masaru with password 'xxxxxxxxxxx';
ALTER ROLE
データベースの作成
『Google コミュニティ モビリティ レポート』のデータベースを作ってみます。
(base) masaru@ASUS-TUF-Gaming:~$ createdb google_mobility
DBeaverで接続します。
DBeaverでSQL文を実行してテーブルを作成します。
create table google_mobility(
id SERIAL primary key,
country_region_code varchar(2) ,
country_region varchar(255) ,
sub_region_1 varchar(255) ,
sub_region_2 varchar(255) ,
metro_area varchar(255) ,
iso_3166_2_code varchar(32) ,
census_fips_code varchar(32) ,
date date ,
retail_and_recreation_percent_change_from_baseline integer ,
grocery_and_pharmacy_percent_change_from_baseline integer ,
parks_percent_change_from_baseline integer ,
transit_stations_percent_change_from_baseline integer ,
workplaces_percent_change_from_baseline integer ,
residential_percent_change_from_baseline integer);
CSVデータのインポート
いよいよCSVのインポートです。DBeaverはCSVも格納先フォルダをデータベースとして登録してからPostgreSQLにインポートするのがお作法のようです。
データベース上のテーブルとCSVでカラム名が一致していれば、マッピングで困ることはないようです。
とは言え、Google Mobilityデータも短期間のうちにplace_idというカラムが増えており、オープンデータの扱いのやっかいさを実感します。さらにCSVの中身が壊れているとインポートの段階で苦しみます……💦
増えていたカラムはvarchar(32767)で格納されてしまっているので、varchar(32)に縮小します。
select place_id from google_mobility limit 10;
alter table google_mobility alter column place_id type varchar(32);
SQL select文でデータ抽出
select count(*) from google_mobility;
select * from google_mobility
where sub_region_1 = 'Tokyo'
order by date desc;
4838804レコードから400ミリ秒ほどでselect文を実行できました。緊急事態宣言が解除された東京ですが、まだ交通、職場、小売店などでは自粛の影響が残っているようです。