RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

【RDBMS】PostgreSQLインストール・コマンド入門編

f:id:Hiroto-Kitamura:20201102160817p:plain

はじめに

こんにちは、新卒1年目のHiroto-Kitamuraです。
私の所属する部署ではRDBMS(関係データベース管理システム)にPostgreSQLを採用しており、私も日々勉強を行っています。
その中で難しく感じたことの1つが、ターミナルに打ち込むコマンドです。
RDBMSが変わっても共通する点の多いDML(テーブル内データを操作する系統のSQL、SELECTやINSERTなど)と異なり、コマンドはRDBMSによって差が大きく、私はなかなか慣れることができませんでした。
またインストール方法についても、簡単なインストールツールがあるとはいえRDBMSによる違いは大きいでしょう。
記事をご覧の皆様の中にも、複数のRDBMSを使っていて混乱したことがある方は多いのではないでしょうか。

本記事では、SQLはある程度わかるけど自分でインストールしたりコマンドで管理を行ったことがないという方や、データベースを触ったことはあるけどPostgreSQLはわからないという方向けに、最も基本的であるWindowsにおける簡単なインストール方法基本的なコマンドについて書いていきたいと思います。
なお、SQLが何かわからない、ほとんど触ったことがないという方は本記事を見ながらPostgreSQLのインストールをした後、無料でダウンロードできる標準教科書の1~6章などで基本的なSQLについて知ることをおすすめします。

PostgreSQLのインストール手順

WindowsにおけるPostgreSQLの簡単なインストール手順です。
本記事ではWindows10 64bit版における手順を説明します。
なお、本記事で紹介する方法以外にソースコードからコマンドでインストールする方法もありますが、難しく初心者にはメリットもあまりないので今回は触れません。

ダウンロード

www.postgresql.org
まず、このページのDownload the installerをクリックしてダウンロードサイトに移動してください。
f:id:Hiroto-Kitamura:20201030145950p:plain
その後、Windows x86-64の列にあるダウンロードリンクをクリックするとPostgreSQLインストーラ(インストールプログラム)がダウンロードされます。
f:id:Hiroto-Kitamura:20201030150634p:plain
バージョンは会社等で指定があればそれにするべきですが、特になければ最新のもの(記事投稿時点で13)で大丈夫です。
ただし新しいバージョンが出たばかりだとPostgreSQL日本語ドキュメントが対応していない場合もあるので、その場合は1つ前のバージョンをインストールしたほうがいいかも知れません。

インストール

いよいよPostgreSQLのインストールに入ります。
前項でダウンロードしたインストーラ(postgresql-[バージョン番号]-windows-x64.exe)をダブルクリックして起動しましょう。
f:id:Hiroto-Kitamura:20201030152608p:plain
Nextを押して進めていくとインストールする場所や付属ツールの有無などを聞かれますが、特に必要性やこだわりがなければデフォルトのままで問題ありません。

しばらくするとスーパーユーザー(管理者)のパスワード入力を求められるので、使用するものを入力してください。
慣例的に、最初のユーザー名はpostgresになっています。
このユーザー名とパスワードはデータベースを管理する上でログインに必要なので、必ず覚えておきましょう。(パスワードは忘れても再設定可能です)
f:id:Hiroto-Kitamura:20201030152842p:plain
次に、PostgreSQLが外部と接続する際に用いるポート番号の設定です。
基本はデフォルト値(5432)で問題ありませんが、既に使われている場合は警告が出て先に進めませんので、5433など別の番号にしましょう。
f:id:Hiroto-Kitamura:20201030153548p:plain
今度はロケール(地域)の設定です。
日本に設定しておくと全角文字の並べ替え等の際に日本語を考慮した挙動をしてくれるようですが、その分検索性能が低くなる場合があるので、C(無設定)にするのがおすすめです。
なお、この場合でもデータベースに日本語は利用できますので、日本語のデータを入れる予定がある場合でも基本的にCで問題ありません。
f:id:Hiroto-Kitamura:20201030155316p:plain
その後設定事項を確認してNextを押していくとインストールが始まります。
しばらくかかるので、気長に待ちましょう。

この画面が出ればインストールが終わっています。
Stack Builderは追加ツールをインストールするためのものなので、特に必要がなければチェックを外しましょう。
Finishを押せば、ついにPostgreSQLのインストール完了です!
f:id:Hiroto-Kitamura:20201030160407p:plain

pgAdminの使い方

先程インストールしたPostgreSQLには、pgAdminというGUIツールが含まれています。
データベースの管理コマンドについては後程触れていきますが、それよりまずSQLを書いてテーブルやデータを操作したい!という方はこちらを使用するのがおすすめです。
本筋から外れるので簡単な説明に留めますが、気軽にSQLを触りたい方はぜひご覧ください。

まずスタートメニューを開き、pgAdminと入力して出てきたアプリをクリックします。
f:id:Hiroto-Kitamura:20201030162336p:plain
ブラウザでpgAdminが起動するので、ユーザー名にpostgres、パスワードに先程決めたものを入力してログインしましょう。
ログインが出来たら、左側の>マークを押していくと現れるpostgresデータベース(本格的な開発は他のデータベースが望ましい、下記参照)をクリックで選択し、上のTools>Query Toolをクリックします。
f:id:Hiroto-Kitamura:20201030163436p:plain
するとエディタが現れるので、SQLを書いていきましょう。
書いたSQLはF5キーで実行できます。
f:id:Hiroto-Kitamura:20201030170101p:plain
なお、本記事はPostgreSQLのインストールとコマンドについての記事なので、SQLについての詳しい説明は割愛します。
マニュアルなどを参照してください。

ちなみに、postgresデータベースは後述のpsqlコマンドやサードパーティ製品におけるデフォルトの接続先として使われるためのものなので、本格的なデータ構築を行う際はcreatedbコマンドやpgAdmin>Databases右クリックで別にデータベースを作成してそこで行うようにしましょう。

PostgreSQLの基本的なコマンド

本節ではインストール後ターミナルで使用できるPostgreSQLの基本的なコマンドと、その使い方について解説します。
本記事ではWindowsを前提に紹介しますが、MacLinuxでも基本的な部分は変わりません。
ただし、Ubuntuのaptでインストールした場合はinitdbやpg_ctlまわりのコマンドが大きく違いますのでご注意ください。(詳しい紹介は割愛します)

当然ですがPostgreSQLをインストールしないと使えないので、まずは前節を見ながらインストールを行った上で、本節をご覧ください。
なお、コマンドのオプションは主なもののみの紹介となっています。詳しく知りたい方は、PostgreSQLドキュメントをご参照ください。

PGDATA環境変数

これはコマンドではありませんが、以下の解説で時々登場する用語なのでここで説明します。
PGDATA環境変数はOSで設定できる、PostgreSQLのデータベースクラスタ(データベースの集まり)のフォルダを表す値です。
以下で解説するコマンドではデータがあるフォルダを指定する必要があるのですが、この環境変数を設定しておくことでコマンドを入力する際にいちいちフォルダ名を入力する必要がなくなります。

設定方法ですが、まずスタートメニューを開いてシステムの詳細設定と入力して出てきたアプリをクリックします。
その後[環境変数]>[新規]の順にクリックし、変数名の欄にPGDATA、変数値にインストール時に指定したデータベースクラスタの場所(デフォルト値ではC:\Program Files\PostgreSQL\<バージョン番号>)を入力し、OKを押していけば設定完了です。
f:id:Hiroto-Kitamura:20201102103334p:plain
なお、他にもPostgreSQL関連の環境変数が存在しますが、同様に設定すればOKです。

initdb

以下、大カッコ[ ]で囲まれている部分は、省略可能であることを表します。

指定したフォルダにPostgreSQLのデータベースクラスタを作成するコマンドです。
PostgreSQLではこのデータベースクラスタの中にデータベースを作成することになります。
先述した方法でインストールを行うと自動的に1つクラスタが作成されるので、単純な利用方法であれば実行する必要はありません。
ただしデータベースサーバーはクラスタ単位で起動できるため、1つのマシンを複数のサービスで利用する場合にはこのコマンドを使うことになるでしょう。
なお、ポート番号が同じサーバーは複数同時起動できないので、複数のサーバーを同時起動する場合は設定ファイル(postgresql.conf)でportパラメータを変更する必要があります。
詳しくはPostgreSQLドキュメント等を参照してください。

コマンドの使い方:
$ initdb [-D ディレクトリ] [-E エンコーディング] [--locale=ロケール] [-U スーパーユーザ名]


オプションの意味は以下のとおりです。

オプション名 意味 省略時のデフォルト値
-D クラスタを作成するフォルダ PGDATA
-E 文字エンコーディング OSの設定値
--locale ロケール(前節で解説) OSの設定値
-U スーパーユーザー名 コマンドの実行者のOSにおけるユーザー名

-Dには空のフォルダを指定するようにしてください。
-EにはUTF8やEUC_JPが使用できます。
-Uではクラスタの管理者ユーザー名を指定できます。
OSのユーザーとPostgreSQLのユーザーは別個の概念なので、異なる名前の設定が可能です。

pg_ctl

PostgreSQLサーバーの起動、終了などを行うコマンドです。
設定ファイルの変更反映にも使用します。

サーバーが起動していないとSQLや以下の管理コマンドの実行はできません。
ただし、先述のインストール方法を使うとインストール完了時とPC起動時に自動的にサーバーが起動する設定になるので、毎回このコマンドでサーバーを立ち上げる必要はありません。

コマンドの使い方:
$ pg_ctl 操作 [-D ディレクトリ] [-t 最大待ち時間] [-m シャットダウンモード]


操作の部分に入る主なコマンドは以下のとおりです。

コマンド名 意味
start サーバーを起動する
stop サーバーを停止する
restart サーバーを再起動する
reload 設定ファイルを再読込する
status サーバーの起動状況を表示する

設定ファイルの項目の中には、reloadではなくrestartでサーバーを再起動する必要があるものもあります。
詳しくはPostgreSQLドキュメントを参照してください。

オプションの意味は以下のとおりです。

オプション名 意味 省略時のデフォルト値
-D クラスタのあるフォルダ PGDATA
-t 起動・停止の最大待ち時間 60秒
-m 停止モード(下記で解説) fast

-tはstart,stop,restart、-mはstop,restartを行うときのみ利用できます。
-mは停止時の挙動を指定するもので、以下のオプションがあります。

オプション名 意味
smart サーバーへの接続の切断を待つ
fast サーバーへの接続を強制切断
immediate サーバーを緊急停止
次回起動時に復旧が必要

psql

起動しているPostgreSQLサーバーに接続し、データベースの操作などを行うコマンドです。

コマンドの使い方:
$ psql -l [-p ポート番号] [-U ユーザー名]
または
$ psql [-c コマンド] [-f ファイル名] [-p ポート番号] [-U ユーザー名] [-d データベース名]

オプションの意味は以下のとおりです。

オプション名 意味 省略時のデフォルト値
-l データベースの一覧を表示して終了 実行しない
-c 実行するSQLコマンド 実行しない
-f 実行するSQLが書かれたファイル名 実行しない
-p サーバーのポート番号 PGPORT環境変数
-U 接続するPostgreSQLユーザー名 コマンドの実行者のOSにおけるユーザー名
-d 接続するデータベース名 postgres

-dを省略してデータベース名のみ記載することも出来ます。
また、データベース名のあとに-Uを使わずユーザ名を記載することも可能です。
$ psql [-c コマンド] [-f ファイル名] [-p ポート番号] データベース名 ユーザー名

-l,-c,-fを指定した場合、指定の操作を実行してコマンドは終了します。
これらを指定しなかった場合は、PostgreSQLターミナルが起動し、先述のpgAdminのようにSQLを入力、実行することが出来ます。
なお、各種操作の実行には設定ファイルに示された方法によるログインが必要です。
f:id:Hiroto-Kitamura:20201102115837p:plain

createuser, dropuser

ユーザーを作成、削除するコマンドです。

コマンドの使い方:
$ createuser [オプション] 作成するユーザー名
$ dropuser [-p ポート番号] [-U ユーザー名] 削除するユーザー名


オプションでは、主に作成するユーザーに許可する操作を設定できます。
主なオプションとその意味は以下のとおりです。

オプション名 意味 省略時のデフォルト値
-s(-S) スーパーユーザー権限を設定する(しない) -S
-d(-D) データベース作成権限を設定する(しない) -D
-r(-R) ユーザー作成権限を設定する(しない) -R
-l(-L) ログイン権限を設定する(しない) -l
-P 作成と同時にパスワードを設定する しない
--interactive 権限の有無を対話的に指定 しない
-p サーバーのポート番号 PGPORT環境変数
-U このコマンドを実行するPostgreSQLユーザー名 コマンドの実行者のOSにおけるユーザー名

権限関連のオプションを指定しない場合はログイン権限のみ持つユーザーが作成されます。
-Pオプションを指定しない場合、パスワードは設定されません。
ただし後でSQLを使って設定ができますし、パスワードを使わないログイン認証方法もあるため、必ずしもここで設定する必要はありません。
-Uオプションは現在コマンドプロンプトを開いているOSのユーザー名とユーザー作成権限を持つPostgreSQLのユーザー名が異なる場合に使用します。
作成・削除するユーザー名を入力するのではないことに注意してください。

ちなみに、PostgreSQLのインストール時に作成したユーザーはスーパーユーザー権限を持っています。
スーパーユーザー権限はあらゆる権限を兼ね備えた権限なので、安易に作成するべきではありません。

createdb, dropdb

データベースを作成、削除するコマンドです。

コマンドの使い方:
$ createdb [-O ユーザー名] [-T テンプレートDB名] [-p ポート番号] [-U ユーザー名] データベース名
$ dropdb [-p ポート番号] [-U ユーザー名] データベース名


オプションの意味は以下のとおりです。

オプション名 意味 省略時のデフォルト値
-O データベースの所有者 -Uで指定したユーザー
-T 元となるデータベース template1
-p サーバーのポート番号 PGPORT環境変数
-U 接続するPostgreSQLユーザー名 コマンドの実行者のOSにおけるユーザー名

PostgreSQLでは、新しいデータベースはいずれかの既存のデータベースをコピーする形で作成します。
デフォルトではtemplate1という空のデータベースを利用しますが、-Tコマンドで他のデータベースを指定することも出来ます。
また、事前にtemplate1にデータを追加しておくことで共通のテンプレートを作成することも可能です。

終わりに

PostgreSQLのインストール方法、コマンドの基本について駆け足で説明してきましたが、いかがでしたでしょうか。
恐らく、読んでいて「このコマンドが動かない」「この場合はどうするの」といった疑問が生まれた方も多いでしょう。
それだけPostgreSQLは奥が深く、短い記事ですべて詳しく説明することができないということなのです。
ただ、だからといってPostgreSQLが勉強が難しい、とっつきづらいということではありません。
幸いなことに、PostgreSQLには日本語で書かれた詳しいドキュメントがあります。
Googleで検索すれば個人ブログ等で噛み砕かれた使い方も様々出てくるでしょう(この記事もその1つとして書いています)。

この記事であまり触れられなかった内容として、設定ファイル(postgresql.conf,pg_hba.confなど)・バックアップなどがあります。
気になった方はぜひ調べてみてください。
本記事を入り口に、PostgreSQLの世界に入ってくる方が増えることを願っています。

参考文献

福岡博・笠原辰仁・宇山公隆 (2019) 『OSS教科書 OSS-DB Silver Ver2.0対応』 翔泳社
SRA OSS, Inc. 日本支社 正野裕大 (2020) 『徹底攻略OSS-DB Silver問題集[Ver.2.0]対応』 インプレス
日本PostgreSQLユーザ会 「PostgreSQL日本語ドキュメント」<https://www.postgresql.jp/document/>

Copyright © RAKUS Co., Ltd. All rights reserved.