Ubuntu 21.04にPostgreSQL 13をインストールする

準備

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文を実行してテーブルを作成します。

DBeaverでテーブルを作成する
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;
Google Community Mobility ReportからSQL select文でデータを抽出する

 4838804レコードから400ミリ秒ほどでselect文を実行できました。緊急事態宣言が解除された東京ですが、まだ交通、職場、小売店などでは自粛の影響が残っているようです。

コメントする

メールアドレスが公開されることはありません。