郵便番号をPOSTGRESQLでデータベースにインポート

![pos1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1134006/75c8a085-fb0c-31de-c5f1-3ce39113e3c5.png)
#MacでPostgreSQLを使用するためPostgres.appをインストール
Postgres.appはアプリケーションフォルダに配置する必要があり、名前を変更することはできません。パスを変更してしまうとライブラリが見つからなくなってしまいます。まずはアプリケーションフォルダにドラッグしてダブルクリックし[インストール](https://postgresapp.com/downloads.html)しましょう。ターミナル上で起動させます。

```terminal
/Applications/Postgres.app/Contents/Versions/13/bin/psql
```
#Postgreでデータベース・テーブル作成

```sql
create database db_name;
```
`create database データベース名;`を入力してpostgre内にデータベースを作ります。

```sql
drop database db_name;
```
`drop database データベース名;`で**削除**することができます。

```sql
\l
```
`\l`でデータベースの**一覧**を確認できます。

```sql
create table tb_name
(column1 char(21) NOT NULL,
column2 varchar NOT NULL,
column3 varchar NOT NULL,
column4 varchar NOT NULL);
```
`create table テーブル名`で改行して`(カラム名 データ型 制約);`でテーブルを作成します。データベース名を郵便番号`（postal_code）`、テーブル名を`(post_tb)`、カラム（列）名１行目は`postals`(郵便)２行目は`prefectures`(都道府県)３行目は`municipalities`(市町村)４行目は`address`(住所)とします。データ型である長さｎ文字の固定長文字`char`の(　)内に日本語表示でおよそ１文字3バイト分を取り(7*3=21)ました。制約には一般的に列が`NULL`を取らないように`NOT NULL`を置きます。長さｎ文字の可変長文字列`varchar(n)`は、ｎを取って直接`NOT NULL`をマークしました。`\d postal_code`でテーブルの構造を表示してみます。 

```
                     Table "public.postal_code"
     Column     |       Type        | Collation | Nullable | Default 
----------------+-------------------+-----------+----------+---------
 postals        | character(21)     |           | not null | 
 prefectures    | character varying |           | not null | 
 municipalities | character varying |           | not null | 
 address        | character varying |           | not null | 
```
#CSV形式の[郵便番号データ](https://www.post.japanpost.jp/zipcode/dl/kogaki-zip.html)を取得
![pos2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1134006/ff6538d2-76e9-95ff-bf38-fdf781b52f2d.png)
![pos3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1134006/b54d98d2-b464-2dd7-364e-5b9606ed9373.png)
郵便局の都道府県一覧（**ZIP**形式）より`全国一括`郵便番号をダウンロードしてきて、拡張子をCSV形式、エディタで表示できるようにエンコードを`UTF-8`に変換、さらに郵便番号、都道府県、市町村、住所以外を取り除き、ファイルを保存します。VS-CODEで表示できるか確認してみましょう。
![pos4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1134006/f7556d09-3680-6ab1-de38-7178fca0d4c8.png)それぞれ( , )カンマで区切られてテーブルに入れられそうになりました。
#`\COPY`でCSVファイルをデータベースに保存
最後にターミナルからコマンドを使用して`CSVファイル`をデータベースに格納いたします。以下のコマンドを入力して下さい。
`\COPY テーブル名 from 'PATH/CSVファイル'with csv`

```terminal
\copy postal_code from 'desktop/KEN_ALL.CSV'with csv
```
郵便番号`KEN_ALLファイル`をデスクトップに置いたため、パスは上記のように入力致しました。

```terminal
COPY 124517
```
と表示されれば、**POSTGRESQLデータベース**内の**postal_codeテーブル**の中に全国の郵便番号が入りました。`select * from テーブル名;`でテーブル内のデータ一覧を確認してみます。

```
select * from postal_code;
```

```
        postals        | prefectures |    municipalities  |          address                                    
-----------------------+-------------+--------------------+-----------------------------------
 600000                | 北海道       | 札幌市中央区         | 以下に掲載がない場合
 640941                | 北海道       | 札幌市中央区         | 旭ケ丘
 600041                | 北海道       | 札幌市中央区         | 大通東
 600042                | 北海道       | 札幌市中央区         | 大通西（１～１９丁目）
 640820                | 北海道       | 札幌市中央区         | 大通西（２０～２８丁目）
 600031                | 北海道       | 札幌市中央区         | 北一条東
 600001                | 北海道       | 札幌市中央区         | 北一条西（１～１９丁目）
 640821                | 北海道       | 札幌市中央区         | 北一条西（２０～２８丁目）
 600032                | 北海道       | 札幌市中央区         | 北二条東
 600002                | 北海道       | 札幌市中央区         | 北二条西（１～１９丁目）
 640822                | 北海道       | 札幌市中央区         | 北二条西（２０～２８丁目）
 600033                | 北海道       | 札幌市中央区         | 北三条東
 600003                | 北海道       | 札幌市中央区         | 北三条西（１～１９丁目）
 640823                | 北海道       | 札幌市中央区         | 北三条西（２０～３０丁目）
 600034                | 北海道       | 札幌市中央区         | 北四条東（１～８丁目）
 600004                | 北海道       | 札幌市中央区         | 北四条西（１～１９丁目）
 640824                | 北海道       | 札幌市中央区         | 北四条西（２０～３０丁目）
 600035                | 北海道       | 札幌市中央区         | 北五条東
 600005                | 北海道       | 札幌市中央区         | 北五条西（１～２４丁目）
 640825                | 北海道       | 札幌市中央区         | 北五条西（２５～２９丁目）
 600006                | 北海道       | 札幌市中央区         | 北六条西（１０～２５丁目）
 640826                | 北海道       | 札幌市中央区         | 北六条西（２６～２８丁目）
```
なんとか、無事に今回のタスクをこなせました。最終的なプロジェクトは本番サーバーで郵便番号検索できるまでなので！　まだまだ初級ですが一つずつ攻略して行こうと思います。