たまには pgAdmin4 も
使ってみよう!
日本PostgreSQLユーザ会関西支部 片岡 道雄
2018.4.21 第8回関西DB勉強会
自己紹介
 名前: 片岡 道雄 ( @rzl5 )
 職業:尼崎のほうにある大手ネットショップで派遣プログラマしてます
 さいきん転職しました
 自宅が滋賀なので、兵庫まで通うのたいへんです。
 今季見ているアニメ:
 銀河英雄伝説 Die Neue These
 ひそねとまそたん
 ヒナまつり
 ウマ娘 プリティーダービー
 今季、新作アニメの本数多すぎないですか???
本日のアジェンダ
 pgAdmin4とは?
 pgAdminⅢとpgAdmin4、何がちがうの?
 pgAdmin4の歴史
 pgAdmin4はいいの?使えるの?
 pgAdminのまめ知識
 さいごに
※つい1週間ほど前(4月13日)、pgAdmin4の最新版が突然発表されまして
とくにWindows版とかちょっと動きかわってるところがあります。
まだ追い切れてないので 資料が微妙なところはご容赦ください。
pgAdmin4とは?(1)
 グラフィカルなユーザー・インターフェイスを持つ、 PostgreSQL専用の
データベース管理クライアント。
 黒い画面じゃなくて、マウスで操作できるやつです。
 DBとかスキーマとかテーブルとか作ったり、入っているデータをみたりできます。
 無料で使えます。
 ライバルとして以下のようなのがいます。
 pgAdminⅢ
 A5:SQL Mk-2(A5M2)
 HeidiSQL
 Navicat ※有償
 SI Object Browser ※有償 などなど。
pgAdmin4とは?(2)
 こんな感じ
pgAdmin4とは?(3)
 公式サイトがあります。 https://www.pgadmin.org/
 ダウンロード
 https://www.pgadmin.org/download/
 https://www.postgresql.org/ftp/pgadmin/
 ドキュメント
 https://www.pgadmin.org/docs/pgadmin4/dev/
postgresql.org にて配布している
全部英語です
pgAdmin4とは?(4)
 PostgreSQL 本体と同じくオープンソースですが、
米国にあるEnterprizeDB社のメンバーが中心になって開発されてるようです。
 EnterprizeDB社とは?
 PostgreSQLの商用サービスを行っている会社。
 PostgreSQLのWindows用インストーラパッケージを提供してたりするので、Windows使いに
はなじみ深いです。
(インストール中にロゴでてきますよね)
 自分とこで作ってたからか、PostgreSQL 9.6系の頃まではWindows用PostgreSQLを
インストールすると、問答無用でpgAdminもインストールされてました。
 PostgreSQL10からはインストールする/しないを選択できるようになってます
pgAdmin4とは?(5)
 pgAdminⅢとは別物です。
 「pgAdminⅢ」「pgAdmin4」までが製品名だとおもってください。
 バージョン番号は別にあるので注意してください。
 2018年4月21日時点のpgAdmin4最新バージョンは「 v3.0 」です。
pgAdmin4 v3.0 。
余談:PostgreSQLのバージョンについて
 7.3 2002-11-27 スキーマ, ドメイン, PREPARE
 7.4 2003-11-17 IPv6, information_schema
 8.0 2005-01-19 Microsoft Windows対応, SAVEPOINT, PITR, 表領域
 8.1 2005-11-08 2相コミット, ROLE, 行共有ロック, テーブル・パーティショニング
 8.2 2006-12-05 ウォームスタンバイ, GIN
 8.3 2008-02-04 更新処理性能の向上, XMLデータ型, 全文検索, JIS X 0213, ENUM型, UUID型
 8.4 2009-07-01 再帰クエリ, ウィンドウ関数, 列単位のアクセス制御, SQLと関数の性能解析機能
 9.0 2010-09-20 レプリケーション, 一括権限変更, 匿名プロシージャ, 64bit Windows サポート
 9.1 2011-09-12 同期レプリケーション, 外部テーブル, パッケージ管理, UNLOGGEDテーブル, 更新可能なWITH句
 9.2 2012-09-10 インデックスオンリースキャン, カスケードレプリケーション, JSON型, 範囲型
 9.3 2013-09-09 マテリアライズドビュー, 外部テーブルへの書き出し, イベントトリガ
 9.4 2014-12-18 JSONB型, SQLからのサーバー設定の変更(ALTER SYSTEM)
 9.5 2016-01-07 UPSERT機能, ALTER TABLE tablename ENABLE ROW LEVEL SECURITYコマンド
 9.6 2016-09-29 同期レプリケーション機能の強化(「remote_apply」モード)
 10 2017-10-05 ロジカルレプリケーション, 宣言的テーブルパーティショニング
pgAdminⅢとpgAdmin4、何がちがうの?
(1)
pgAdminⅢ pgAdmin4
プログラム言語 C++ Python2.7、JavaScript
サポートするPostgres Postgres7.3~9.6まで Postgres9.2~10
サポートするOS Windows、Mac OS X Linux, Unix, Mac OS X
and Windows
初版 v1.0.0 (2005-06-09) v1.0 (2016-09-29)
最新版 v1.22.2(2016-11-10) v3.0 (2018-04-13)
更新版 もう出ません つぎはv3.1だそうです
pgAdminⅢとpgAdmin4、何がちがうの?
(2)
 pgAdminⅢのソースを全部捨てて、Python/Javascriptでイチから書き直されました。
 pgAdminⅢは C++なので環境ごとにコンパイルしてバイナリを作る必要があった。
デスクトップアプリ。
 pgAdmin4はPythonってことでWebアプリへ華麗に転身したのです。
 ちなみにpgAdmin2はVB6で書かれていて完全なWindowsアプリ
 余談ですが pgAdminⅢ、 C++ でも wxWidgets というのを使ってマルチプラット
フォームだよ!というのをウリにしていて、
 実際、当初はDebian, OpenSuse, Redhat, Fedora-core, Slackware, freeBSDなどなど多彩
なバイナリがでてたのですが、v1.10のころ(2010年ごろ)には早くも
os x(とWindows)のバイナリしか提供されなくなってました。。。
pgAdminⅢとpgAdmin4、何がちがうの?
(3)
 最大の違いは、
 pgAdminⅢがデスクトップアプリであるのに対し、
 pgAdmin4はPythonで動くWebアプリであるということ。
 pgAdminⅢのようなデスクトップアプリとしても動くし、(デスクトップモード)
 Windows版の場合、デスクトップランタイムが一緒にインストールされるので
別途Pythonをインストールする必要はありません
 Pythonが別途動く環境であれば、Webブラウザ上で動かすこともできる。(サーバーモード)
 v3.0から“ブラウザで動くソフト”になりました!
 デスクトップアプリではなくなりました。
 MySQLの phpMyAdmin的なものになったわけです。
NEW!
pgAdmin4の歴史(1)
 2016-09-29 - v1.0 PostgreSQL9.6と共に颯爽登場!
 2016-10-27 - v1.1 Features: 2 BugFixes:36
 2017-02-10 - v1.2 Features:12 BugFixes:76
 2017-03-10 - v1.3 Features: 5 BugFixes:29
 2017-04-13 - v1.4 Features: 3 BugFixes:27
 2017-05-19 - v1.5 Features: 1 BugFixes:21
 2017-07-13 - v1.6 Features:12 BugFixes:73
 2017-10-05 - v2.0 Features: 9 BugFixes:65
 2018-01-11 - v2.1 Features: 8 BugFixes:65
 2018-04-13 - v3.0 Features:24 BugFixes:75
v1.1 - 1.2
4か月の沈黙。
中の人は相当追い詰め
られてたと思う
v1.2 - 1.5
怒涛の毎月バージョンアップ
v1.6
ようやく落ち着いた
v2.0
PostgreSQL10とともに
メジャーバージョンアップ。
v3.0
早くも3.0!?
BugFixes数が減らないなあ
v1.0
衝撃!のもっさり感と
不安定さ。
pgAdmin4の歴史(2)
 ごらんのとおりpgAdmin4、非常に活発に開発が進んでいます。
 最新版v3.0の主な変更点
 デスクトップランタイムはシステムトレイアプリケーションとして実行され、システム上
のブラウザを使用してpgAdminを表示します。これにより、QtWebKit / QtWebEngineに
よって引き起こされる多数のバグや問題が解決されます。
 クエリツールでデータを編集モードでソートできるようになりました。
 マウス操作なしでpgAdminを使用できるように、多くの操作用の設定可能なショートカット
を備えたキーボードナビゲーションが追加されました。
 ダッシュボードのテーブルとチャートは有効/無効にすることができます。
 サーバとデータベースの統計、関数、パーティション、外部テーブル、およびEXPLAINが
Greenplumでサポートされるようになりました。
 pg_service.confファイルのサポートが追加されました。
 Docker Containerディストリビューションは大幅にスリム化され、PunAdmin Webアプリ
ケーションをホストするGunicornのAlpine Linuxに移行しました。
 Pythonのコーディング規約PEP8に準拠するための様々な修正
pgAdmin4はいいの?使えるの?(1)
 pgAdminⅢの良いところ
 テーブルデータの一覧表示は明らかにpgAdminⅢの方が速い。件数が多いと顕著。
 全体的に pgAdminⅢのがサクサク動く。
 熟成されてる感じで、安心して使える。
 古いPostgresにも使える。7.3からOK。
 pgAdminⅢがダメなところ
 Postgres10以降では使えない。
 9.6は、最終版のv1.22.2のみ対応しています
 事実上、Windowsでしか使えない。
 しかも一台ずつインストールする必要がある。インストールマニュアル作って配布して
導入サポートするのがめんどくさかった。
個人の感想です
pgAdmin4はいいの?使えるの?(2)
 pgAdmin4の良いところ
 Postgres10に対応している。
 「サーバーモード」で、1台にインストールしたpgAdminを他のPCからブラウザ経由
で利用することができる。
 MySQLの phpMyAdmin的な利用方法がやっとできるようになりました!
 監視系の機能が充実している。稼働状況のリアルタイムグラフとか。
 pgAdmin4がダメなところ
 まだまだ使われていると思われるPostgres9.1以前が扱えない。
 論外なv1.0/1.1系はともかくとして、v2.0系でも「使える」レベルには達したが
「快適に使う」レベルにはまだまだ道のりが遠そう。
 v3.0はかなり改善してる気がします。要チェック!
個人の感想です
NEW!
pgAdmin4はいいの?使えるの?(3)
 結論
 多数のメンバーでPostgreSQL使うなら、pgAdmin4のサーバーモード便利です。
 LinuxとかMacのひとなら、pgAdmin4 試してみるのもよい経験になると思います。
 Windows使いでPostgres10の予定がないなら、pgAdminⅢで良いんじゃないでしょうか。
 Windows使いでPostgres10の予定があるならA5M2とかも私は好きです。
 先週出たpgAdmin4 v3.0 は動作速度かなり改善してよい感じです!
個人の感想です
緊急情報:pgAdmin4 v3.0について
 先週出たpgAdmin4 v3.0 は動作速度かなり改善してよい感じです!
 が、周りの話を聞くかぎり、不具合多い。
 インストール直後は動作してるけど再起動すると起動しなくなるとか。
 インストールで指定した以外のブラウザを使うと動かないとかWebアプリにあるまじきとか。
 データベースをリストアしたら成功しても「失敗しました」って出るとか。
 日本語化したら設定が表示されなくなったとか。
 v3.1か3.2まで待った方がよいかと。
4/20追記:
→ 最新情報によると、日本語化ファイルに問題があるようです。
英語で使用する、または
日本語の messages.poと messages.mo を対策版に変えると動くみたいです。
参考: http://a23.sblo.jp/article/183030435.html
余談:
 昨年、Postgres9.6のWindows版パッケージをインストールした人向け
 pgAdmin4が強制インストールされてるとおもいます
 そいつは封印して、pgAdmin4の v2.0以降 又は pgAdminⅢを別途インストールすべき。
 特にpgAdmin4 v1.0 or v1.1は重いうえに動作自体が信用できないので使わない方がよいです。
 Postgres9.5 まではpgAdminⅢなので安心です。
 Postgres9.6 がいちばん微妙(pgAdmin的に)
 Postgres10 からはpgAdminをインストールする/しないを選択できるようになりました。苦情多かったと思われ。
個人の感想です
pgAdminのまめ知識(1)
「PostgreSQL Binary Path」の設定
 pgAdminをインストールして、「バックアップ・リストアがうまく動かない」 「なん
か動きがおかしい」ときはこの設定を見直してみてください。
 Postgresを複数バージョンインストールしてるときは要チェック。
 pgAdminⅢも同様です。
 設定:
1. pgAdminの上部ドロップダウンリストから
file▼ > Preferences を選択。
2. 左メニューの Paths > Binary paths を選択。
3. PostgreSQL Binary Pathのところに、
インストールしたPostgresのbinのパスを書く
pgAdminのまめ知識(2)
Windows版pgAdmin4をサーバーモードで動かす
 pgAdmin4にはデスクトップモードとサーバーモードがあります。
 明確な切り替えスイッチがあるわけではありません。デスクトップランタイムも一緒に
インストールされていたらデスクトップアプリとしても動きますよ、程度の話です。
 手順:
1.Windows用のPython、2.7系の最新バージョンをダウンロード&インストール
https://www.python.org/downloads/windows/
python-2.7.13.msi で動作確認しました。
※32bit版を使用してください。(pgAdmin4がx86版しかないですしね。。。)
2.Pythonのインストールフォルダから python.exe、python27.lib の2つをコピー。
C:Python27python.exe
C:Python27libspython27.lib
3.pgAdmin4のインストールフォルダ
C:Program Files (x86)pgAdmin 4v2venv の中に上記2つをコピー。
4.コマンドプロンプトを開き、python.exeをコピーしたフォルダに移動し、pgAdmin4.pyを蹴る。
cd "C:Program Files (x86)pgAdmin 4v2venv“
python ../web/pgAdmin4.py
5.ブラウザで localhost:5050 を開く。
pgAdmin4 v3.0
なら標準!
pgAdminのまめ知識(3)
pgAdmin4の日本語化
 日本PostgreSQLユーザ会有志の皆さんが数ヶ月がかりで翻訳を行ってくださいまして、
日本語表示できるようになってます。
 V2.0系以降が対象です。 → ※v3.0は最初から日本語化ファイル入ってました。
 手順:
1.https://github.com/postgres/pgadmin4/tree/master/web/pgadmin/translations/ja/LC_MESSAGES
から messages.po と messages.mo をダウンロードし
~ pgAdmin 4v2webpgadmintranslationsjaLC_MESSAGES の中にコピー
(フォルダが無ければつくってください)
2.pgAdmin 4v2webconfig.py をテキストエディタで開き、LANGUAGES に「,'ja','Japanese'」を追加。
3.pgAdminの上部ドロップダウンリストから
file▼ > Preferences から、Miscellaneous > User Language でJapanese を選択。
4.同じく file▼ のところから Reset Layoutする。
※詳しくは http://kkida-galaxy.blogspot.jp/2017/12/pgadmin4ja.html などご覧ください。
pgAdmin4 v3.0
なら標準!
pgAdminのまめ知識(4)
CentOS7 への pgAdmin4インストール
 yumコマンドで一発インストールしようとすると・・・pgAdminⅢが入ります。
 PostgreSQL9.6以降のリポジトリでないとpgAdmin4ありません。
 yumで入れようとするとハマりやすいので、wheelで入れた方がよいです。(要python2.7)
 Conohaの630円プランでの導入例:
ブラウザで http://{サーバのIP}:5050 を開く。
$ yum -y install gcc gcc-c++ kernel-devel
$ yum -y install python-devel
$ easy_install pip
$ pip install --upgrade pip
$ cd /tmp
$ wget https://ftp.postgresql.org/pub/pgadmin/pgadmin4/v3.0/pip/pgadmin4-3.0-py2.py3-none-any.whl
$ pip install pgadmin4-3.0-py2.py3-none-any.whl
$ cd /usr/lib/python2.7/site-packages/pgadmin4
$ cp -p config.py config.py.org
$ vi config.py
※DEFAULT_SERVER = '127.0.0.1' → '0.0.0.0'に変更
$ firewall-cmd --add-port=5050/tcp --zone=public
$ python pgAdmin4.py
pgAdminのまめ知識(5)
pgAdmin4で「bytea_output」とかいうエラーが出た
 サポート外の古いPostgreSQL(上記の例ではPostgres8.4)に接続しようとすると
発生することがあるようです。
 エラーメッセージわかりにくくないですかね。。。
さいごに
かたおかは
pgAdmin4を応援
しています。
ご清聴ありがとう
ございました。

180421第8回関西DB勉強会- たまにはpgAdmin4も使ってみよう