PostgreSQLのデータをGUIでいじる（macOS/Postico）

# 本記事の対象者
* ちょこっとしたデータの修正をさくっとGUIでやりたい（できれば無料で）
* Excelのデータを簡単にPostgreSQLのテーブルに追加したい
* AWS RDSのデータをGUIで触りたい

# 記事の内容
* PosticoでPostgreSQLをいじる方法を丁寧に説明しています

# PosgtreSQLをGUIでいじるソフト？
* [OSXで使えるpostgresqlのGUIクライアント](http://uozias.hatenablog.com/entry/2016/08/15/OSX%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8Bpostgresql%E3%81%AEGUI%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88)を参照のこと
	* [PG Commander](https://eggerapps.at/pgcommander/)
	* [PSequel](http://www.psequel.com/)
	* [Postico](https://eggerapps.at/postico/)
* CSVimport機能があると書かれていたPosticoをかるく使ってみた。
	* （実際はCSV importではなく、表データコピペ機能だった。後述参照）
* 一時的なことだと思われるが、[pgadmin](https://www.pgadmin.org/download/macos4.php)はダウンロードしてもなぜか展開が出来なかったので試さなかった。
* windowsは調べてない

# Posticoをインストールする
## インストール
* [Postico](https://eggerapps.at/postico/)をDownloadする
* アプリをApplicationsフォルダに入れる

## 無料版の制限
ちょこっといじりたいぐらいの用途であれば無料版でも困らない。でも、使いやすいので、応援のため買ってもいいかも。

なお、無料版の制限は以下の通り。
* データーベース接続設定の保存が5つまで
* 作業ウィンドウは1つまで
* テーブルフィルタ（検索みたいな機能）が使えない
* __試用期間の制限なし__

## 購入する場合
* App Storeから購入することを進めていた。
* 2016/12/19現在6000円

# 使用方法説明
## ローカルのPostgreSQLに接続する
* (もちろん既にlocalにはPostgreSQLのDBが作られていることが前提です)

1. Posticcoを起動する
2. __New Favorite__ を押す
3. 接続したいPostgreSQL DBの情報を入力する
    * DBのユーザー名
    * DBのパスワード
    * DBの名称
 [![https://gyazo.com/35256656bfcae705927dc63bd91186f6](https://i.gyazo.com/35256656bfcae705927dc63bd91186f6.png)](https://gyazo.com/35256656bfcae705927dc63bd91186f6)

4. __Connect__ を押す

## （接続後）DBのテーブルを開く
* (前提：prefecturesというテーブルがDBに存在してる)

1. 下記のアイコンをダブルクリック
 [![https://gyazo.com/ece0fc3a945fb03b5c99f152c6cda93e](https://i.gyazo.com/ece0fc3a945fb03b5c99f152c6cda93e.png)](https://gyazo.com/ece0fc3a945fb03b5c99f152c6cda93e)

2. テーブルの内容が見られる
 [![https://gyazo.com/17d1b452624c018e48f90463847cb760](https://i.gyazo.com/17d1b452624c018e48f90463847cb760.png)](https://gyazo.com/17d1b452624c018e48f90463847cb760)
 
## データを編集する
1. 編集したい行のセルをダブルクリック
[![https://gyazo.com/8ebdda8bcd0e8e99fb695754478ecac0](https://i.gyazo.com/8ebdda8bcd0e8e99fb695754478ecac0.png)](https://gyazo.com/8ebdda8bcd0e8e99fb695754478ecac0)

1. 文字列を追加して __Save changes__ ボタンを押す
[![https://gyazo.com/3a5e5ea2b9f0fb029e60f90469942966](https://i.gyazo.com/3a5e5ea2b9f0fb029e60f90469942966.png)](https://gyazo.com/3a5e5ea2b9f0fb029e60f90469942966)

* 編集を取り消したい時は __Discard changes__ を押す

## データを追加する
1. __+Row__ ボタンを押す
[![https://gyazo.com/6ac30011b0297bbcd7da94a605e3b14e](https://i.gyazo.com/6ac30011b0297bbcd7da94a605e3b14e.png)](https://gyazo.com/6ac30011b0297bbcd7da94a605e3b14e)

2. 一時的に編集用の行が追加される
[![https://gyazo.com/627724d3ea57c8ea9650eefb09cecf7d](https://i.gyazo.com/627724d3ea57c8ea9650eefb09cecf7d.png)](https://gyazo.com/627724d3ea57c8ea9650eefb09cecf7d)

3. 行の内容を編集する
[![https://gyazo.com/e210c997e4d823b00bbbdb2e1539b416](https://i.gyazo.com/e210c997e4d823b00bbbdb2e1539b416.png)](https://gyazo.com/e210c997e4d823b00bbbdb2e1539b416)

4. __Save Changes__ を押して編集した行をデータベースに保存する
[![https://gyazo.com/12156aa25c26255780fb9058efb91626](https://i.gyazo.com/12156aa25c26255780fb9058efb91626.png)](https://gyazo.com/12156aa25c26255780fb9058efb91626)

5. 行が追加された
[![https://gyazo.com/da234d2274294f2fcd87bfd35f6ff876](https://i.gyazo.com/da234d2274294f2fcd87bfd35f6ff876.png)](https://gyazo.com/da234d2274294f2fcd87bfd35f6ff876)

* 編集を取り消したい時は __Discard changes__ を押す

## Excelから一括でデータ追加する
* Excelでデータを作成して、コピペだけでPostgreSQLにデータを追加

1. Excelでデータを作成する
    * __(重要)__ Excelの列の順序はPostgreSQLのテーブルのカラムの順序と同じにすること
[![https://gyazo.com/4b23a82f21ec60fe0d8ed661a4500891](https://i.gyazo.com/4b23a82f21ec60fe0d8ed661a4500891.png)](https://gyazo.com/4b23a82f21ec60fe0d8ed661a4500891)
    * 一行目のヘッダー名はコピーするときの範囲外なのでどんな文字列でも良い。しかし、実務上はカラム名を書いた方がミスが起こりにくいので、カラム名を書くことを推奨
    * 上記Excel表内の __E5__ セルのようにセル内の改行も可。ただし、Railsなどでこの改行がどのように表示されるかはわかりません。そちらは各自確認してください。

2. Excelのデータをコピーする
    * データ行のみを選択してコピーする
[![https://gyazo.com/21b6fb6a50d4a1b4f826d22fd2ac965c](https://i.gyazo.com/21b6fb6a50d4a1b4f826d22fd2ac965c.png)](https://gyazo.com/21b6fb6a50d4a1b4f826d22fd2ac965c)

3. Posticoでペーストする
    * 適当なところでcommand + Vを押すと
    [![https://gyazo.com/7e237eff62368e53ee525e43c3460a28](https://i.gyazo.com/7e237eff62368e53ee525e43c3460a28.png)](https://gyazo.com/7e237eff62368e53ee525e43c3460a28)
    * 以下のようになる
[![https://gyazo.com/0cb477a4c0776e726e1c52d47a10b79f](https://i.gyazo.com/0cb477a4c0776e726e1c52d47a10b79f.png)](https://gyazo.com/0cb477a4c0776e726e1c52d47a10b79f)

4. __Save Changes__ を押してペーストした行をデータベースに保存する
[![https://gyazo.com/ce97b3529e54373f71e1d085289dd8c9](https://i.gyazo.com/ce97b3529e54373f71e1d085289dd8c9.png)](https://gyazo.com/ce97b3529e54373f71e1d085289dd8c9)

5. 行が追加されることが確認できる
[![https://gyazo.com/d1e180fe1f91188b5b98f8337547e6bf](https://i.gyazo.com/d1e180fe1f91188b5b98f8337547e6bf.png)](https://gyazo.com/d1e180fe1f91188b5b98f8337547e6bf)

## 行の削除
* 取り消しは出来ないので行うときは慎重に！

1. 削除したい行を選択する
[![https://gyazo.com/484072450bd48ca006ea12782f8103c5](https://i.gyazo.com/484072450bd48ca006ea12782f8103c5.png)](https://gyazo.com/484072450bd48ca006ea12782f8103c5)

2. deleteキーを押す
[![https://gyazo.com/bf44ef6b6ce1d51bdf0e1323584636fd](https://i.gyazo.com/bf44ef6b6ce1d51bdf0e1323584636fd.png)](https://gyazo.com/bf44ef6b6ce1d51bdf0e1323584636fd)

3. __Save Changes__ を押して削除を確定する
[![https://gyazo.com/7c11db348a25d402e2ae1f769a63cce2](https://i.gyazo.com/7c11db348a25d402e2ae1f769a63cce2.png)](https://gyazo.com/7c11db348a25d402e2ae1f769a63cce2)

4. 削除をされたことを確認する
[![https://gyazo.com/99eaef53c5436fbb642ee698eace892d](https://i.gyazo.com/99eaef53c5436fbb642ee698eace892d.png)](https://gyazo.com/99eaef53c5436fbb642ee698eace892d)

* "3"の箇所で他の行をクリックするとピンク色で選択されるので、そのままSave changesボタンを押すとまとめて削除できる。

## AWS RDS (PostgreSQL)に接続する

### 接続したいPostgreSQL DBの情報を得る

1. RDSダッシュボード→インスタンスから接続したいPostgreSQLインスタンスを展開する
[![https://gyazo.com/dedba180b6310808c9e5312058cc6524](https://i.gyazo.com/dedba180b6310808c9e5312058cc6524.png)](https://gyazo.com/dedba180b6310808c9e5312058cc6524)

2. 下記の情報をメモする
   * DB名
   * ユーザ名
   * エンドポイント

### AWS RDSに外部から接続できるようにセキュリティーグループを追加する
* （注意）下記例はどこからでも接続を許可する設定であるため、セキュリティー上のリスクが高まります。
* 下記設定は一時的な利用にとどめるか、もしくは、永続的に使う場合は接続できるIPを限るなどの処置をとってください。

1. 同上の画面からセキュリティグループ（active）のリンクをクリック
2. インバウンドタブを押して編集を押す
[![https://gyazo.com/2af775de18abe72fab6dbc001964f5cd](https://i.gyazo.com/2af775de18abe72fab6dbc001964f5cd.png)](https://gyazo.com/2af775de18abe72fab6dbc001964f5cd)

3. ルールの追加→PostgreSQL→任意の場所→保存
[![https://gyazo.com/38430a8faef2c7275b3c5c30b6c7be5c](https://i.gyazo.com/38430a8faef2c7275b3c5c30b6c7be5c.png)](https://gyazo.com/38430a8faef2c7275b3c5c30b6c7be5c)

### PostinoにAWSの設定を入力して接続する
1. 下記の通り接続したいPostgreSQL DBの情報をPostinoに入力する
[![https://gyazo.com/2ea00574d952fb23b1ea3e84b879ef29](https://i.gyazo.com/2ea00574d952fb23b1ea3e84b879ef29.png)](https://gyazo.com/2ea00574d952fb23b1ea3e84b879ef29)

2. アラートがでるが、そのままconnectを押す
[![https://gyazo.com/35797b876b6927670f2d4adfe7010e3e](https://i.gyazo.com/35797b876b6927670f2d4adfe7010e3e.png)](https://gyazo.com/35797b876b6927670f2d4adfe7010e3e)

3. 下記の通り接続される（テーブル名は各々のデータベースで異なります）
[![https://gyazo.com/8e6f3c3557868c31e0ef4e487839367b](https://i.gyazo.com/8e6f3c3557868c31e0ef4e487839367b.png)](https://gyazo.com/8e6f3c3557868c31e0ef4e487839367b)