はじめに
『オープンソースデータベース標準教科書 -PostgreSQL-(Ver.2.0.0)Kindle版』で
「郵便番号のCSVファイルを格納するデータベースを設計し、そこにデータを格納する」という演習があったので、実行したい。
(教科書の章=4.演習 --4.2演習2:郵便番号データベース)
環境
バージョン | ||
---|---|---|
Host OS | Windows 10 Home | 21H1(OSビルド:19043.1165) |
Virtual Machine(仮想環境技術) | WSL2 | - |
Remote OS(仮想環境OS) | Ubuntu | 20.04.2 LTS (GNU/Linux 5.4.72-microsoft-standard-WSL2 x86_64) |
Database | PostgreSQL | 12.7 (Ubuntu 12.7-0ubuntu0.20.04.1) |
Database GUI | 無し | - |
Docker | 無し | - |
エディタ | Visual Studio Code | 1.60.0 |
やりたいこと
① CSVファイルをそのままWSLにインポートすると文字化けするので、文字化けを解消する
② CSVファイルをWSL上にインポート
① 郵便番号CSVデータを用意→文字化け解消の下準備
1)郵便局HPから下記をダウンロード
※ダウンロード後、ファイルを解凍しておく(ファイルを右クリック→「すべて展開」)。
DL元 | 住所の郵便番号(CSV形式)読み仮名データの促音・拗音を小書きで表記するもの(例:ホッカイドウ)> 全国一括 |
---|---|
DLされたファイル名 | ken_all.zip |
解凍後のファイル名 | KEN_ALL.CSV |
文字コード | SHIFT JIS(「郵便番号データファイルの形式等」より) |
2)郵便番号データの文字コードをシフトJISからUTF-8へ変更
(PostgreSQLの文字コードがUTF-8なので、そちらに合わせる。合わせないと、PostgreSQLで扱うときに文字化けしてしまう。)
標準教科書に
ダウンロードできるCSVデータは、日本語部分がシフトJISで作成されています。一方、 現在使用しているデータベースは日本語をUTF-8 で格納するようにしているため、文字コードをUTF-8に揃える必要があります。
(引用元:『オープンソースデータベース標準教科書 -PostgreSQL-(Ver.2.0.0)』4.2.3 データのロードと 文字コードについて)
とあった。
「KEN_ALL.CSV」を右クリック
↓
プログラムから開く
↓
「メモ帳」を選択
↓
ファイル
↓
名前を付けて保存
↓
文字コードをANSIからUTF-8に変更して「保存」
メモ)psqlで\encodingメタコマンドを使用する方法と、Linuxのコマンドで文字コード変換をする方法
標準教科書に
シフトJISのデータをUTF-8に変換するには、psqlで\encodingメタコマンドを使用する方法と、Linuxのコマンドで文字コード変換をする方法があります。
(引用元:『オープンソースデータベース標準教科書 -PostgreSQL-(Ver.2.0.0)』4.2.3データのロードと文字コードについて)
とあり、続けてその方法も記載されていた。
追ってこれらの方法も試してみたい。
② CSVをUbuntu(WSL2)にインポート
前提条件:WSL2にUbuntuがインストールされ、VSCのRemote Desktopに接続済みの状態
ターミナルで下記コマンドを実行。
$pwd
(pwdコマンド=現在の作業ディレクトリを表示)
(→ /home/umesanと表示される)
$ls -la
(ls コマンド=ファイルやディレクトリの一覧を表示)
(-lオプション=詳細形式で表示」)
(-aオプション=全てのファイルを表示(ドットで始まる隠しファイルも表示))
(→ 「total 56」をはじめ、ずらっと何行も表示される)
↓表示された画面
↓
databaseフォルダを作成
UMESAN[WSL:UBUNTU-20.04]の下のファイル名が並んだところの下の何も無い部分をクリック
(これをしないと下のファイルが選択されて、その内部に新規ファイル作成されてしまうので)
↓
New Folderアイコンをクリック
↓
「database」と入力
↓
databaseフォルダが作成された。
↓
$cd database/
(cd コマンド=作業ディレクトリを移動)
(→ 表示が「umesan@MyComputer:~$ 」から「umesan@MyComputer:~/database$」に変わった。databaseフォルダに移動できた。)
$pwd
(→ /home/umesan/databaseと表示される)
↓
<メモ>
エクスプローラーからVSCにファイルをD&Dすると最終的にUbuntuにSFTP転送されファイルアップロードされる。
・D&D = drag and drop
・SFTP転送 = ローカルとリモートのサーバー間でファイルを安全に転送する方法。SSHで暗号化された通信経路で転送される。
↓
「KEN_ALL.CSV」をWin10エクスプローラーからVSCの「database」にD&Dする。
↓
インポートできた!
↓
ターミナルで下記コマンドを実行。
$cat KEN_ALL.CSV
(cat コマンド=ファイルの閲覧)
(→ csvファイルの内容がダダ―っとターミナルに表示された)
インポート完了!
追って調べたい
【文字コードについて】
・Shift-jisとUTF-8の違い
・どう使い分けられてる?
・なぜ文字コードがある?
・どの文字コードがどのOSで使われやすいか?(だからこの環境だったから文字変換が必要だったんだという理解につながる。仕組みを論理的に把握でき、次に文字化けトラブルが起きた時に対処しやすい。)
<意識>
・「どういう時になぜどういう文字コードなのか?」という情報を得られるか?
【コマンドでの文字コード変更について】
ubuntuのコマンドベースでテキストエディタを使わないで、ファイルを文字コード変換する方法。
→教科書に載っていた方法(↑「1-メモ」参照)を実際に試してみたい。
疑問
今は気にすることではないのかもしれないが、
言葉について、「インポート」と「アップロード」の違いがよくわかっていない。
インポート:アプリケーション内にデータを取り込むこと。アプリケーション間のデータの移行に使う。
アップロード:ファイルをサーバー等に置いてくること。PCとサーバーのファイルのやり取り。
(参考:https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13127718938)
とのことだが、では、今回行なった
「CSVをUbuntu(WSL2)にインポート/アップロード」は、どちらの言葉が適切なのだろう?
因みにSQLのinsert文のインサートも、SQLとしてだけだはなく、言葉としても、「データをデータベースにインサート」するときに使うとのこと。
次やる事
・「KEN_ALL.CSV」をDBにインサート
・DBeaverからUbuntu(WSL2)への接続
(pg_hbaの設定が効いていない可能性を疑ってみる。設定前に戻して、エラー文言が変わらなければ設定が間違ってたり、効いていない可能性を疑おう。)
・「KEN_ALL.CSV」のデータをDBeaverで参照