pimientitoの機械学習

「機械学習って何だろう。」から、はじまり、いまだ???の毎日。数学初心者、PG・DBアマチュアのサービス・エンジニアが、どこまで理解できるのか。

【前処理の学習-番外編3-④】PostgreSQL 管理Tool「pgAdmin」によるDB管理(Windows環境編)

前回は、PostgreSQLの大まかな構成を調べてみました。

pimientito-handson-ml.hatenablog.com

今回から具体的にDBを作成していきます。

【今回の目標到達点】

pgAdminを使ってDBを新規作成する。

【もくじ】


DB設定項目の系統図

はじめにDBを作成するときの設定項目を、おおまかに理解するため項目の系統図を書いてみました。

ざっと見渡してみても、いろいろと設定する必要があり、ひとつひとつ理解するためには、長い時間がかかりそうです。

今回は、ブログ「pimientitoの機械学習」本編で必要な項目のみ設定してDBを作成いたします。


f:id:Pimientito:20180811130348j:plain


DB新規作成

メニューバーから[オブジェクト] > [作成] > [データベース]を選択して押下します。

f:id:Pimientito:20180811140844j:plain

表示された「作成 - データベース」画面から各種設定を行っていきます。


「一般」タブの設定

「一般」タブでは、"データベース名"と"所有者"を設定いたします。

f:id:Pimientito:20180811141201j:plain

今回の設定内容

項目名 設定値
データベース weather_data
所有者 pimientito
コメント ※今回は記載していません

現在、ブログ本編で気象データを使用しているため、今回作成するデータベース名を「weather_data」といたしました。

所有者は、前々回【前処理の学習-番外編3-②】で作成したスーパーユーザ「pimientito」(赤枠内)を選択いたします。


「定義」タブの設定

「定義」タブでは、新規作成するDBの基本的な仕様を設定いたします。

f:id:Pimientito:20180813163843p:plain

今回の設定内容

項目名 設定値
エンコーディング UTF8(※1)
テンプレート template1(※2)
テーブル空間 pg_default
照合順序 Japanese_Japan.932(※3)
文字の分類 Japanese_Japan.932(※3)
接続制限 -1(※4)

(※1) 初期値はUTF8。今回使用するデータの文字コードUTF-8のため、初期値のままに設定いたします。

(※2) マニュアル(pgAdmin4.3.2 documentation「Database Dialog」)では、指定するテンプレートが無い場合「template1」を選択することを推奨しています。

(※3) 本記事後半「補足「定義」タブ内の各種設定値について」に選択理由を記載しています。

(※4) 「-1」は無制限を表現します。


「セキュリティ」タブの設定

「セキュリティ」タブでは、「権限」でアクセス権限を定義し「セキュリティラベル」では、オブジェクトに適用するセキュリティラベルを定義いたします。

なお「セキュリティラベル」は、SE-Linuxの強制アクセス制御機能に関するもので、今回作成するDBはローカル内での使用と限定しているため、特に設定は行いません。

定義する場合、項目欄右側にある「+」マークを押下してください。

f:id:Pimientito:20180813190752p:plain

今回の設定内容(権限)

受領者 権限 権限 付与者
pimientito ALL WITH GRANT OPTION(※1) postgres
CREATE WITH GRANT OPTION
TEMPORARY(※2) WITH GRANT OPTION
CONNECT(※3) WITH GRANT OPTION

(※1) 「WITH GRANT OPTION」を付与されることで受領者は、第三者に同じ権限を付与することができます。

(※2) TEMPORARY TABLE(一時テーブル)を作成することを許可します。TEMPORARY TABLEは、セッションまたはトランザクションが終了すると自動的に削除されます。

(※3) 指定されたDBに接続することができます。

今回の設定内容(セキュリティラベル)

プロバイダ セキュリティラベル
- -

SE-Linuxの強制アクセス制御に関する機能のため、今回は設定いたしません。


「パラメータ」タブの設定

「パラメータ」タブで設定する値のほとんどがpostgresql.confファイル内の値であり、すべての設定値を理解・把握するには、あまりに広範囲過ぎるため、今回の記事では割愛させていただきました。

f:id:Pimientito:20180813191023p:plain

今回の設定内容

名称 ロール
- - -


SQL」タブの確認

SQL」タブでは、各種設定がSQL文として生成されていることを確認できます。

f:id:Pimientito:20180813231925p:plain

生成されたSQL文を確認後、画面下部の「保存」ボタンを押下すると、DBが新規作成されます。 画面上では「postgres」DBの下に、新たに「weather_data」DBが表示されていることを確認できます。

f:id:Pimientito:20180813232832p:plain


以上で、DBの新規作成の手順は完了です。



補足「定義」タブの各種設定について

今回DBを新規作成するにあたり「定義」タブの設定項目には、非常に悩まされました。

設定に至るまでの過程で、さまざまな資料を確認した際に得た情報の一部を、大まかではありますが下記に記載いたします。

なお、より詳細についてご興味のある方は、本ブログ記事末尾の【参考資料】に各資料へのリンクを記載しておりますのでご確認ください。


エンコーディング」設定値一覧

こちらは、DB上の文字セットの選択肢です。一覧ではリスト内の選択肢名と言語名を紐付けています。

マニュアル「PostgreSQL 10.4文書 第23章 多言語対応 23.3.1 サポートされる文字セット」では、下記の一覧に加えて、各文字セットのPostgreSQLサーバでの利用可否や、ICU(International Components for Unicode)ライブラリのサポート適用有無についても言及されています。

選択肢名 文字コード名 言語名
BIG5 Big Five 繁体字
EUC_CN Extended UNIX Code-CN 簡体字
EUC_JP Extended UNIX Code-JP 日本語
EUC_JIS_2004 Extended UNIX Code-JP
JIS X 0213
日本語
EUC_KR Extended UNIX Code-KR 韓国語
EUC_TW Extended UNIX Code-TW 繁体字/台湾語
GB18030 National Standard 中国語
GBK Extended National Standard 簡体字
ISO_8859_5 ISO 8859-5/ECMA 113 ラテン/キリル
ISO_8859_6 ISO 8859-6/ECMA 114 ラテン/アラビア語
ISO_8859_7 ISO 8859-7/ECMA 118 ラテン/ギリシャ語
ISO_8859_8 ISO 8859-8/ECMA 121 ラテン/ヘブライ語
JOHAB JOHAB 韓国語(ハングル)
KOI8R KOI8-R キリル文字(ロシア)
KOI8U KOI8-U キリル文字(ウクライナ)
LATIN1 ISO 8859-1/ECMA 94 西ヨーロッパ
LATIN2 ISO 8859-2/ECMA 94 中央ヨーロッパ
LATIN3 ISO 8859-3/ECMA 94 南ヨーロッパ
LATIN4 ISO 8859-4/ECMA 94 北ヨーロッパ
LATIN5 ISO 8859-9/ECMA 128 トルコ
LATIN6 ISO 8859-10/ECMA 144 北欧
LATIN7 ISO 8859-13 バルト派
LATIN8 ISO 8859-14 ケルト
LATIN9 ISO 8859-15 LATIN1でヨーロッパと訛りを含む
LATIN10 ISO 8859-16/ASRO SR 14111 ルーマニア
MULE_INTERNAL Mule internal code 他言語Emacs
SJIS Shift JIS 日本語
SHIFT_JIS_2004 Shift JIS/JIS X 0213 日本語
SQL_ASCII 未指定(※1) 何でも
UHC 統合ハングルコード 韓国語
UTF8 Unicode/8-bit すべて
WIN866 Windows CP866 キリル文字
WIN874 Windows CP874 タイ語
WIN1250 Windows CP1250 中央ヨーロッパ
WIN1251 Windows CP1251 キリル文字
WIN1252 Windows CP1252 西ヨーロッパ
WIN1253 Windows CP1253 ギリシャ
WIN1254 Windows CP1254 トルコ
WIN1255 Windows CP1255 ヘブライ
WIN1256 Windows CP1256 アラビア語
WIN1257 Windows CP1257 バルド語派
WIN1258 Windows CP1258 ベトナム語

(※1)

SQL_ASCIIの設定は、他の設定とかなり異なります。サーバのキャラクタセットSQL_ASCIIのとき、サーバは0から127のバイト値をASCIIに変換します。一方、128から255までは変換されません。 設定がSQL_ASCIIの場合は、符号化は実行されません。よって、この設定は特定の符号化を使用している場合には、その符号化を無視するようになってしまいます。

PostgreSQL 10.4文書「23.3.1 サポートされる文字セット」より抜粋


「テンプレート」設定一覧

次にテンプレートの選択肢です。マニュアルによると新規DBを作成する場合、基本的には「template1」を選択することを勧めています。

「template1」は「template0」を複製したもので、そこへ新たにオブジェクト(テーブルや手続き言語など)を追加して保存することで「template0」から拡張された「template1」が作成されます。

「template0」は、PostgreSQL DBの標準仕様の原型であり、複製して利用します。例えばWindows環境にインストールしたPostgreSQLの「template1」の設定パラメータを確認してみます。

f:id:Pimientito:20180813130143p:plain

「setting」の値(ロケール)が"Japanese_Japan.932"となっていますが、もしこの値を別の値(CやPOSIX)でDBを作成したい場合は、テンプレート「template0」を指定して新しいテンプレートを作成する必要があります。


テンプレート名 概要
postgres PostgreSQLデータベースサーバ
template0 テンプレート原型(DB標準オブジェクト群のみ)
template1 template0をベースに用途に合わせたオブジェクトを追加し拡張した雛形


「テーブル空間」設定一覧

テーブル空間とは、DBオブジェクトを表すファイルを格納するためのファイルシステム上の場所を指します。テーブル空間を新規に作成していない場合、PostgreSQLをインストールした際に作成された「pg_default」のみとなります。

テーブル空間名
pg_default


「照合順序」設定一覧

「照合順序」とは、文字列の並び替え順を管理しています。

照合順序名 概要
C 標準C( ISO C ) /POSIX類似仕様
POSIX POSIX正規表現
Japanese_Japan.932 SJIS


「文字の分類」設定一覧

「文字の分類」とは、文字の分類や大文字や小文字の変換などを管理しています。

分類 概要
C 標準C( ISO C ) /POSIX類似仕様
POSIX POSIX正規表現
Japanese_Japan.932 SJIS


「照合順序」と「文字の分類」の設定値選択基準

「定義」タブの「照合順序」と「文字の分類」については、設定値の選択基準が、とても複雑で、なかなか理解することができませんでした。

また「照合順序」と「文字の分類」の定義は、DB作成後、変更する事ができないため、安易に選択することができません。

今回は下記の情報をもとに、双方ともに「Japanese_Japan.932(SJIS)」を選択することにいたしました。


日本語を扱う場合、サーバのエンコーディングは UTF8 または EUC_JP になると思いますが、日本語ロケールを使う場合には 表1 の組み合わせを使う必要があります。


表1:エンコーディングと日本語ロケールの対応表

エンコーディング POSIX Windows
UTF8 ja_JP.utf8 Japanese_Japan.932(※)
EUC_JP ja_JP.eucJP Japanese_Japan.932

Windows で UTF8 エンコーディングを使う場合のみ、ロケールエンコーディングにコードページ 932 (SJIS) を使うことができます。これは Windows の C ライブラリが UTF8 でのロケール処理をサポートしていないためで、PostgreSQL 側で専用の対応を行っています。

Let's Postgres 「ロケール(国際化と地域化) 」より抜粋


以上が、DBを新規作成する際に得た情報となります。

特に「照合順序」と「文字の分類」の設定値に関しては、DBの使用環境も含めて検討しないで設定すると、文字の表示順序や手続き言語の利用時に思わぬエラーに遭遇することがあるようで、今回の学習だけでは把握しきれないものでした。

今後、ブログを続けていくなかで、今回作成したDBで想定外の不具合に遭遇したとき、あらためて今回学んだ内容を見直したいと考えています。


次回は、DBテーブルの設計と作成について学習していきます。

今回は、以上です。



【参考資料】

PostgreSQL 10 documentation「23.3.1 Supported Character Sets」(英文)

https://www.postgresql.org/docs/current/static/multibyte.html#MULTIBYTE-CHARSET-SUPPORTED

PostgreSQL 10.4文書「19.1 パラメータの設定」

https://www.postgresql.jp/document/10/html/config-setting.html#CONFIG-SETTING-NAMES-VALUES

PostgreSQL 10.4文書「23.1 ロケールのサポート」

https://www.postgresql.jp/document/10/html/locale.html

PostgreSQL 10.4文書「23.3.1 サポートされる文字セット」

https://www.postgresql.jp/document/10/html/multibyte.html#CHARSET-TABLE

PostgreSQL 10.4文書「SQLコマンド CREATE DATABASE」

https://www.postgresql.jp/document/10/html/sql-createdatabase.html

Let's Postgres「ロケール(国際化と地域化)」

https://lets.postgresql.jp/documents/technical/text-processing/2

Let's Postgres「PostgreSQL 9.1 の新機能 SE-PostgreSQLの統合」

https://lets.postgresql.jp/documents/technical/9.1/1

pgAdmin4.3.2「Managing Cluster Level Objects - Database Dialog -」

https://www.pgadmin.org/docs/pgadmin4/dev/database_dialog.html

ORACLE「国際化対応言語環境の利用ガイド - Cロケール -」

https://docs.oracle.com/cd/E26924_01/html/E27144/glmbx.html

ICU - International Components for Unicode(英文)

http://site.icu-project.org/home#TOC-What-is-ICU-

WikipediaPOSIX

https://ja.wikipedia.org/wiki/POSIX