PostgreSQL – PostgreSQLではじめるDB入門 http://db-study.com DBの基礎から設計の考え方、実践で役立つ知識などを図解を用いてわかりやすく解説しています。さらにPostgreSQLによりサンプルを交えながらSQLを使いこなすために必要な知識をまとめています。 Sun, 04 Feb 2018 05:24:53 +0000 ja hourly 1 https://wordpress.org/?v=4.9.3 psqlからPostgreSQLへ接続する http://db-study.com/archives/225 http://db-study.com/archives/225#respond Mon, 30 May 2016 10:16:42 +0000 http://db-study.com/?p=225 PostgreSQLに対してSQLを実行する手段はいろいろありますが、ここではpsqlというSQLインタプリタプログラムを利用していきます。

psqlは、PostgreSQLに標準で付属しており、PostgreSQLをインストールした環境であれば、すぐに利用できます。

今回は、psqlでPostgreSQLに接続し、データベースに関する情報を表示する手順について見ていきます。

psqlからデータベースへの接続

Linux版のPostgreSQLの場合であれば、シェル上からpsqlコマンドを実行します。

psqlコマンド
psql -U <データベースユーザー名> <データベース名>

-Uオプションでデータベースのユーザー名を指定し、引数としてデータベース名を指定します。psqlコマンドでよく使われるオプションとして以下のようなものがあります。

オプション 説明
-l データベース一覧を表示する。コマンド実行後、データベースに接続したままにならず、プロンプトに戻る。
-c ‘コマンド’ 引数で指定したSQLコマンドを実行し、結果を表示する。コマンド実行後、データベースに接続したままにならず、プロンプトに戻る。
-f ファイル名 引数で指定したファイルの中身をSQLとして実行する。コマンド実行後、データベースに接続したままにならず、プロンプトに戻る。
-p ポート番号 接続するPostgreSQLのポート番号を指定する。
-h ホスト名 接続するPostgreSQLのホスト名を指定する。

では、実際にpsqlを利用してデータベースに接続してみましょう。今回はpostgresユーザーでtemplate1データベースに接続します。

# su - postgres
$ psql -U postgres template1

コマンド実行後は、指定したデータベース(template1)への接続に成功したら、プロンプトが以下のように変わります。

template1=#

このプロンプトになっている間はデータベース(template1)に接続していることを示します。この状態になれば、直接SQLを実行することが可能となります。

また、プロンプトの最後が「=#」になっていますが、この意味は接続したユーザーがスーパーユーザーであることを表しています。一般ユーザーで接続した場合は「=>」になります。

データベースに関する情報表示

SQLを実行する前に、まず接続したデータベースにどのようなテーブルやインデックスがあるのかを確認する方法について見ていきましょう。

データベースに関する情報は、psqlで実装されているバックスラッシュコマンドで参照できます。例えば、定義されているテーブルを確認するには「\d」コマンドを実行します。

template1=# \d

よく使用されるバックスラッシュコマンドとして以下のようなものがあります。

バックスラッシュコマンド 説明
\? バックスラッシュコマンドヘルプを表示
\h SQLヘルプを表示
\q psqlを終了
\l データベースの一覧を表示
\dn スキーマの一覧を表示
\d テーブル、インデックス、シーケンス、ビューの一覧を表示
\dt テーブルの一覧を表示
\di インデックスの一覧を表示
\ds シーケンスの一覧を表示
\dv ビューの一覧を表示
\dS システムテーブルの一覧を表示
\du データベースユーザーの一覧を表示
\df 関数の一覧を表示
\r 入力途中のクエリのリセット
\timing SQL実行時間計測表示のON/OFF

他にもいろいろあり覚えるのが大変かもしれませんが、どのようなことが確認できるのかをおさえておき、バックスラッシュコマンドヘルプを表示するコマンドを最低限覚えておきましょう。

]]>
http://db-study.com/archives/225/feed 0
pgAdminからPostgreSQLへ接続する http://db-study.com/archives/152 http://db-study.com/archives/152#respond Mon, 16 May 2016 13:48:21 +0000 http://db-study.com/?p=152 前回までの手順でpgAdminからPostgreSQLへ接続するための準備が整いました。

早速、PostgreSQLへ接続してみます。

まず、クライアントPCであるWindows上でpgAdminを起動します。pgAdminの起動は、デスクトップ左下のスタートメニューから「すべてのプログラム」-「pgAdmin 3 1.22」-「pgAdmin 3」をクリックします。

すると、以下のウインドウが表示されます。
pgAdmin01

PostgreSQLへ接続します。メニューバーの「ファイル」から「サーバーの追加」をクリックします。
サーバの追加

「サーバーの追加」をクリックすると「新しいサーバ登録」ダイアログが表示されます。
新しいサーバ登録01

項目 説明
名前 pgAdminでの管理用の名前を指定。任意で良い。
ホスト PostgreSQLをインストールしたサーバーのホスト名もしくはIPアドレスを指定。
Port PostgreSQLが待ち受けポート番号を指定。
DBメンテナンス ログインするデータベース名を指定。
ユーザ名 ログインユーザー名を指定。
パスワード ログインユーザーのパスワードを指定。

※「DBメンテナンス」項目について、pgAdminではサーバーに接続すると一度データベースにログインし、データベース一覧やロール一覧を取得します。ここで指定するデータベースはそのためのものです。通常は「postgres」データベースを指定しておけば問題ありません。一度ログインしたらpgAdminから別のデータベースに対しても操作可能です。

上記の設定項目を入力し、「OK」ボタンを押下します。本サンプルでは以下内容を入力します。
新しいサーバ登録02

無事に接続できれば、左ペインのオブジェクトブラウザにサーバー名が追加されます。
接続完了

その際、下図のようにサーバーのアイコンに「×」マークがついていた場合は、まだ接続が完了していません。
PosgreSQL接続01

この場合は、サーバー名を右クリックして、コンテキストメニューから「接続」をクリックしてください。
PostgreSQL接続02

なお、もし以下のようなダイアログが出力された場合は接続失敗です。
接続失敗

PostgreSQLサーバー側のファイアウォール設定等を見直してみてください。

]]>
http://db-study.com/archives/152/feed 0
pgAdminからPostgreSQLへの接続設定 http://db-study.com/archives/144 http://db-study.com/archives/144#respond Thu, 12 May 2016 11:11:29 +0000 http://db-study.com/?p=144 前回はクライアントPCであるWindows上にpgAdminをインストールしました。

これで必要なツールは揃ったわけですが、まだクライアントPC(Windows 7 x64)からPostgreSQLサーバー(CentOS7.2)へ接続することはできません。

PostgreSQLをインストールした直後の初期設定ではPostgreSQLを実行しているサーバー以外のクライアントからデータベースにアクセスすることはできないようになっています。

外部からのTCP接続を許可するとともに、PostgreSQLへのログインを許可する設定を行ってやる必要があります。

今回は、そのための設定方法について見ていきます。

postgresql.confの編集

PostgreSQLの設定は、設定ファイルを編集することで行います。

設定ファイルは複数ありますが、まず、postgresql.confファイルです。
このファイルでは最大接続数やログの保存方式などPostgreSQLに関する基本的な設定を行います。
基本的な設定と言っても、設定項目は非常にたくさんあり、初めは戸惑うかもしれません。

ここではまず、必要最低限な設定項目だけ見ていきましょう。

パラメータ名 内容
listen_addresses TCP接続を許可するIPアドレスを指定。デフォルトは「localhost」で、自分自身のサーバーからしか接続を許可しない。
port 待ち受けるポート番号を指定。デフォルトは5432。
log_destination PostgreSQLが出力するログ出力先を指定。

設定ファイルはテキストファイルですので、viなどのテキストエディタで編集できます。
各項目は「パラメータ名 = 設定値」という形式となります。また、文頭が「#」で始まっている行はコメント行と見なされ、設定反映されません。

postgresql.confが保存されているディレクトリパスは環境変数「$PGDATA」で定義されているパスになります。
echoコマンドで「$PGDATA」の値を確認してみましょう。

# su - postgres
$ echo $PGDATA

パスもわかったので、早速、viでpostgresql.confを開いて編集します。「listen_addresses」と「port」パラメータの値を以下のように変更してください。なお、以降の操作はrootユーザーで実施します。

# vi /var/lib/pgsql/9.5/data/postgresql.conf
 ~ 省略 ~
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*'          # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
port = 5432                             # (change requires restart)

 ~ 省略 ~

「listen_addresses」は変更前はlocalhostとなっていたと思います。「listen_addresses = ‘*’」とすることでネットワークにつながる全ての外部マシンから接続を許可することになります。待ち受けるポート番号はデフォルトのままとします。

pg_hda.confファイルの編集

pg_hda.confファイルはクライアントからのアクセス制御を設定するためのファイルです。デフォルト設定ではPostgreSQLが動作しているマシン上からしかログインを許可しない設定となっているため、外部マシンからのログインを許可するように変更します。

viでpg_hda.confを開きます。格納ディレクトリはpostgresql.confと同じく環境変数「$PGDATA」で定義されているパスになります。

ファイルを開いたら下のほうに青色の行を追加して上書き保存してください。

# vi /var/lib/pgsql/9.5/data/pg_hba.conf
 ~ 省略 ~

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
host    all             all             172.16.0.0/24           md5

 ~ 省略 ~

※172.16.0.0/24の部分は、172.16.0.1~172.16.0.254までのIPアドレスのホスト(クライアント)を許可するという意味になります。許可するネットワークアドレスは各々の環境に合わせて変更してください。

設定の反映

ここまでで、クライアントPC上のpgAdminからPostgreSQLへ接続するための定義変更は完了しました。

最後に変更した内容を反映してやります。

反映は、PostgreSQLを再起動すること行えます。

# systemctl stop postgresql-9.5
# systemctl start postgresql-9.5

以上でPostgreSQLにおける設定は完了です。ただ、PostgreSQLが動作しているOSのファイアウォールでクライアントPCからの接続を遮断してしまうことがあります。

次回はCentOS7におけるファイアウォール解除手順について見ていきます。

]]>
http://db-study.com/archives/144/feed 0
pgAdminのインストール http://db-study.com/archives/133 http://db-study.com/archives/133#respond Tue, 10 May 2016 10:40:33 +0000 http://db-study.com/?p=133 PostgreSQLのデータベースやユーザーなどの管理はPostgreSQLが用意したCUIのコマンドで行うことができますが、pgAdminというツールを使えばGUIにより管理することができます。

PostgreSQLは非常に多機能ですので、PostgreSQLに慣れるという意味でも、まず、pgAdminによるGUIを使って覚えていくと良いでしょう。

実際の現場でも、データベース管理者やアプリケーション開発者など、自分のPCにpgAdminをインストールして便利に活用しています。

ここでは、WindowsのクライアントPC(Windows 7 x64)からPostgreSQLサーバー(CentOS7.2)へ接続するための環境を構築する手順を見ていきます。

pgAdminはクライアントPCにインストールします。

pgAdminのダウンロード

pgAdminは以下のPostgreSQL公式サイトからダウンロードできます。
http://www.pgadmin.org/

上記サイトにアクセスしたら画面上部の「Download」をクリックします。
pgAdminダウンロード01

「Download」をクリックすると以下ページに遷移します。

pgAdminダウンロード02

画面左の「Windows」をクリックします。

pgAdminダウンロード03

ダウンロードするpgAdminのバージョンを選択します。基本的に最新のもの選べば良いです。ここでは、「pgAdmin v1.22.1」をクリックします。

pgAdminダウンロード03

「pgadmin3-1.22.1.zip」をクリックし、ダウンロードします。

pgAdminのインストール

上記でダウンロードしたZIPファイルを解凍した後、展開されたファイルの中に「pgadmin3.msi」というファイルがあります。 そのファイルをダブルクリックし、インストーラーを起動します。
pgAdminインストール01

あとはウィザードに従っていけばインストールできます。
pgAdminインストール02

以上で、pgAdminのインストールは完了です。
早速、pgAdminからPostgreSQLに接続したいところですが、そのための設定が必要であり、まだ接続できません。次回はpgAdminからPostgreSQLへ接続する設定手順について見ていきます。

]]>
http://db-study.com/archives/133/feed 0
サンプルデータベースの作成 http://db-study.com/archives/125 http://db-study.com/archives/125#respond Mon, 09 May 2016 09:42:12 +0000 http://db-study.com/?p=125 PostgreSQLをインストールした後、「postgresql95-setup initdb」コマンドによりデータベースクラスタを作成しました。(詳細は「PostgreSQLの起動・停止」を参照してください。)

データベースクラスタを作成したことで、template0、template1、postgresというデータベースが自動的に作成されます。

template0とtemplate1は文字通り、テンプレートとして機能するデータベースになります。例えば、ユーザーがデータベースを新規作成しようとすると、template1がテンプレートとして使用され、新規作成したデータベースはtemplate1の内容を引き継ぐことになります。

この仕組みにより、新規でデータベースを何個も作成する際に、共通の内容(例えば、テーブルや関数)を定義しておけば、それらの定義を引き継いで新しいデータベースが作成できるというわけです。

template0は、データベースクラスタ作成直後はtemplate1とまったく同じものとなります。template0は書き込みができないため、常に初期状態が保たれます。そのため、template1に対していろいろ手を加えていけば良い訳です。

また、template1の内容を引き継がせたくないデータベースを作成したいケースが出てきた場合は、template0を基にして新規作成すれば良いです。

postgresはデフォルトの接続先データベースとなります。そのため、データベースを指定しない場合は、「postgres」データベースに対して、テーブルなどを作成することになります。

ただし、「postgres」データベースは前述のとおりデフォルトのログイン先のデータベースとして使用されるものなので、ここにユーザーが使用するデータを格納することは推奨されません。

ユーザーの作成

早速、サンプルデータベースを作成してみましょう。

その前に新規でユーザーを作成してみます。初期状態では管理ユーザーである「postgres」ユーザーしか存在しません。これでは、セキュリティの観点で望ましくありません。そこでここでは新しく「posuser」という一般ユーザーを作成します。

まず、OSの「postgres」ユーザーにスイッチします。

# su - postgres
-bash-4.2$

ユーザーを作成するには「createuser」コマンドを使用します。

-bash-4.2$ createuser posuser

続いて、今作成したユーザーを所有者として新規データベースを作成します。データベースを作成するには「createdb」コマンドを使用します。

-bash-4.2$ createdb -O posuser testdb

「-O」オプションでデータベースの所有者として「posuser」を指定しています。

最後に、データベースが正しく作成されたかどうかを確認してみましょう。確認するには「psql -l」コマンドを使用します。

-bash-4.2$ psql -l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |      アクセス権
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 template0 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
 template1 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
 testdb    | posuser  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
(4 行)

最終行に「testdb」データベースが確認できます。

データベースへのログイン

では、今作成したデータベースへログインしてみましょう。データベースへのログインは「psql」コマンドの引数にデータベース名を指定することで行えます。

-bash-4.2$ psql testdb
psql (9.5.2)
"help" でヘルプを表示します.
testdb=#

ログインに成功するとプロンプトが「testdb=#」となります。

ログアウトは「\q」もしくはCtrl+dで行えます。

]]>
http://db-study.com/archives/125/feed 0
ユーザーとパスワードの設定 http://db-study.com/archives/121 http://db-study.com/archives/121#respond Sat, 07 May 2016 08:27:48 +0000 http://db-study.com/?p=121 PostgreSQLをインストールした時点で、自動的にデータベースの管理ユーザーであるpostgresユーザーが作成されます。ただ、このユーザーのパスワードは未設定の状態であるため、アカウントロック状態となっており、このままではrootユーザーからsuコマンドでスイッチする方法以外でのログインができません。

postgresユーザーのパスワード設定(OSユーザー)

そこで、postgresユーザーでログインできるようにパスワードを設定しておきます。パスワードの設定は「passwd <ユーザー名>」コマンドで行えます。

# passwd postgres
ユーザー postgres のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:

「新しいパスワード」プロンプトが表示されるので、任意のパスワードを設定してください。

postgresユーザーのパスワード設定(PostgreSQLユーザー)

前述でpostgresユーザーのパスワードを設定しましたが、そのユーザーはOSのユーザーです。次に設定するのはミドルウェア(PostgreSQL)が管理するユーザーです。同じユーザー名でも両者は異なるユーザーとなるため混合しないように注意して下さい。

まず、OSのpostgresユーザーにスイッチします。

# su - postgres
-bash-4.2$

続いて、psqlコマンドを実行します。psqlコマンドはPostgreSQL対話的ターミナルであり、PostgreSQLに対して各種コマンドを発行して、その結果を確認したり、設定を変更することができます。

-bash-4.2$ psql
psql (9.5.2)
"help" でヘルプを表示します.
postgres=#

コマンドに成功するとプロンプトが「postgres=#」に変わります。このプロンプトになったら以下のコマンドを実行し、PostgreSQLが管理するユーザーの方のpostgresユーザーに対してパスワードを設定します。

postgres=# alter role postgres with password 'postgres';
ALTER ROLE

上記サンプルでは「postgres」という文字列のパスワードを設定しています。

これでパスワードの設定は完了したので、psqlを終了します。終了方法は、「\q」と入力しEnterキーを押下するか、Ctrl+dで行えます。

postgres=# \q
-bash-4.2$

パスワード設定後はPostgreSQLを再起動し、設定を反映させます。なお、PostgreSQLの再起動はrootユーザーで行います。

# systemctl stop postgresql-9.5
# systemctl start postgresql-9.5

以上でパスワードの設定は完了です。

]]>
http://db-study.com/archives/121/feed 0
PostgreSQLの起動・停止 http://db-study.com/archives/118 http://db-study.com/archives/118#respond Fri, 06 May 2016 06:20:29 +0000 http://db-study.com/?p=118 前回でPostgreSQLのインストールが完了したので、早速起動させてみます。

RHEL7/CentOS7からはsystemctlコマンドでサービスを起動させます。

# systemctl start postgresql-9.5
Job for postgresql-9.5.service failed because the control process exited with error code. See "systemctl status postgresql-9.5.service" and "journalctl -xe" for details.

ただ、メッセージからわかるようにPostgreSQLの起動に失敗してしまいました。
また、メッセージではエラーの詳細は「systemctl status postgresql-9.5.service」コマンドを確認するように書かれています。ここでは割愛しますが、一度左記コマンドを実行して確認してみましょう。

ディレクトリが存在しないといったエラーが確認できると思います。これは、PostgreSQLのデータベースクラスタの作成を求められています。

データベースクラスタの作成

PostgreSQLを起動させるためには、まずデータベースクラスを作成する必要があります。
データベースクラスタとは、PostgreSQLが管理するデータを実際に記録するための領域のことです。その実態は、ファイルシステム上に作成されるディレクトリであり、その配下にPostgreSQLが管理する様々なファイルが生成されます。データベースのデータが保存されるのもこの領域になります。

1つのデータベースクラスタ内には、複数のデータベースを作成可能です。また、データベースクラスタには、データベース情報やユーザー情報など、すべてのデータベースに共通のデータも格納されます。

データベースクラスタの作成は「postgresql95-setup initdb」コマンドで行います。(パスを通していないのでフルパスで実行してください。)

# /usr/pgsql-9.5/bin/postgresql95-setup initdb
Initializing database ... OK

コマンド実行後、以下のディレクトリが作成されているはずです。

# ll /var/lib/pgsql/9.5/data
合計 48
-rw-------. 1 postgres postgres     4  4月 30 12:23 PG_VERSION
drwx------. 5 postgres postgres    38  4月 30 12:23 base
drwx------. 2 postgres postgres  4096  4月 30 12:23 global
drwx------. 2 postgres postgres    17  4月 30 12:23 pg_clog
drwx------. 2 postgres postgres     6  4月 30 12:23 pg_commit_ts
drwx------. 2 postgres postgres     6  4月 30 12:23 pg_dynshmem
-rw-------. 1 postgres postgres  4224  4月 30 12:23 pg_hba.conf
-rw-------. 1 postgres postgres  1636  4月 30 12:23 pg_ident.conf
drwx------. 2 postgres postgres     6  4月 30 12:23 pg_log
drwx------. 4 postgres postgres    37  4月 30 12:23 pg_logical
drwx------. 4 postgres postgres    34  4月 30 12:23 pg_multixact
drwx------. 2 postgres postgres    17  4月 30 12:23 pg_notify
drwx------. 2 postgres postgres     6  4月 30 12:23 pg_replslot
drwx------. 2 postgres postgres     6  4月 30 12:23 pg_serial
drwx------. 2 postgres postgres     6  4月 30 12:23 pg_snapshots
drwx------. 2 postgres postgres     6  4月 30 12:23 pg_stat
drwx------. 2 postgres postgres     6  4月 30 12:23 pg_stat_tmp
drwx------. 2 postgres postgres    17  4月 30 12:23 pg_subtrans
drwx------. 2 postgres postgres     6  4月 30 12:23 pg_tblspc
drwx------. 2 postgres postgres     6  4月 30 12:23 pg_twophase
drwx------. 3 postgres postgres    58  4月 30 12:23 pg_xlog
-rw-------. 1 postgres postgres    88  4月 30 12:23 postgresql.auto.conf
-rw-------. 1 postgres postgres 21719  4月 30 12:23 postgresql.conf

これでPostgreSQLの起動準備が整いました。あらためて、以下コマンドを実行します。

# systemctl start postgresql-9.5

エラーメッセージなどが何も出力されなければ、起動に成功しているはずです。

以下コマンドで、PostgreSQLの状態を確認してみましょう。

# systemctl status postgresql-9.5
● postgresql-9.5.service - PostgreSQL 9.5 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-9.5.service; enabled; vendor preset: disabled)
   Active: active (running) since 土 2016-04-30 15:29:06 JST; 2h 50min ago
  Process: 3975 ExecStop=/usr/pgsql-9.5/bin/pg_ctl stop -D ${PGDATA} -s -m fast (code=exited, status=0/SUCCESS)
  Process: 3987 ExecStart=/usr/pgsql-9.5/bin/pg_ctl start -D ${PGDATA} -s -w -t 300 (code=exited, status=0/SUCCESS)
  Process: 3982 ExecStartPre=/usr/pgsql-9.5/bin/postgresql95-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 3991 (postgres)
   CGroup: /system.slice/postgresql-9.5.service
           tq3991 /usr/pgsql-9.5/bin/postgres -D /var/lib/pgsql/9.5/data
           tq3992 postgres: logger process
           tq3994 postgres: checkpointer process
           tq3995 postgres: writer process
           tq3996 postgres: wal writer process
           tq3997 postgres: autovacuum launcher process
           tq3998 postgres: stats collector process
           mq4000 postgres: postgres postgres 172.16.0.4(52929) idle

 4月 30 15:29:05 localhost.localdomain systemd[1]: Starting PostgreSQL 9.5 database server...
 4月 30 15:29:05 localhost.localdomain pg_ctl[3987]: < 2016-04-30 15:29:05.397 JST >LOG:  ログ出力をログ収集プロセスにリダイレ…います
 4月 30 15:29:05 localhost.localdomain pg_ctl[3987]: < 2016-04-30 15:29:05.397 JST >ヒント:  ここからのログ出力はディレクトリ…れます。
 4月 30 15:29:06 localhost.localdomain systemd[1]: Started PostgreSQL 9.5 database server.
Hint: Some lines were ellipsized, use -l to show in full.

エラーは特に出力されておらず、正しく起動しています。

自動起動設定

OSを起動するたび手動でPostgreSQLを起動させるのは大変なので、OS起動のタイミングでPostgreSQLが自動起動されるよう設定します。
RHEL6/CentOS6以前はchkconfigコマンドで行っていましたが、RHEL7/CentOS7からは「systemctl enable」コマンドにより設定します。

# systemctl enable postgresql-9.5
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-9.5.service to /usr/lib/systemd/system/postgresql-9.5.service.

これで、OS起動時にPostgreSQLも自動的に起動するようになります。

]]>
http://db-study.com/archives/118/feed 0
PostgreSQLのインストール http://db-study.com/archives/109 http://db-study.com/archives/109#respond Thu, 05 May 2016 06:06:57 +0000 http://db-study.com/?p=109 今回はCentOS7.2上にPostgreSQLをインストールする手順について見ていきます。

インストール方法はいろいろありますが、ここではyumを使用したインストール方法を紹介します。

yumはRedHat Enterprise LinuxやCentOS、Fedoraなどに搭載されているRPM(Red Hat Package Manager)パッケージの管理ユーティリティです。依存パッケージまで自動的にインストールしてくれて大変便利なユーティリティです。

yumでインストールするRPMパッケージはリポジトリと呼ばれる場所に格納されています。

まず、yumで使用するリポジトリの設定ファイルを入手します。(/etc/yum.repo.d/配下に置かれる「.repo」ファイル)

PostgreSQLのコミュニティでは、RPMパッケージとしてこの設定ファイルを提供しています。
設定ファイルのダウンロードは以下公式サイトから行えます。
http://yum.postgresql.org/

サイトにアクセスしたら、ダウンロードするPostgreSQLのバージョンを選びます。
PostgreSQLダウンロード01
ここでは9.5とするため、「9.5」と書かれたテキストリンクをクリックします。

続いて、ディストリビューションを選びます。
PostgreSQLダウンロード02
ここではCentOS7とするため、「CentOS 7 – x86_64」と書かれたテキストリンクを選ぶわけですが、クリックしてダウンロードするのではなく、テキストリンクを右クリックし、コンテキストメニューから「プロパティ」をクリックします。
PostgreSQLダウンロード03

上記の「アドレス(URL)」欄に記載されたアドレスをコピーして、メモ帳か何かに貼り付けておいてください。

リポジトリ設定ファイルのダウンロード

リポジトリ設定ファイルのダウンロードはwgetコマンドを使用します。パラメーターには先ほどメモ帳に貼り付けておいたURLを指定します。

# wget https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-7-x86_64/pgdg-centos95-9.5-2.noarch.rpm
download.postgresql.org (download.postgresql.org) をDNSに問いあわせています... 213.189.17.228, 217.196.149.55, 87.238.57.227, ...
download.postgresql.org (download.postgresql.org)|213.189.17.228|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 5460 (5.3K) [application/x-redhat-package-manager]
`pgdg-centos95-9.5-2.noarch.rpm' に保存中

100%[======================================>] 5,460       --.-K/s 時間 0s

2016-04-30 11:43:42 (114 MB/s) - `pgdg-centos95-9.5-2.noarch.rpm' へ保存完了 [5460/5460]

もし、wgetコマンドを実行して「-bash: wget: コマンドが見つかりません」のようなメッセージが出力された場合は、wgetがインストールされていない可能性があります。

その場合は、以下コマンドでwgetをインストールします。

# yum -y install wget

RPMのインストール

ダウンロードが終わったら、次にRPMを以下のコマンドでインストールします。

# rpm -ivh pgdg-centos95-9.5-2.noarch.rpm
警告: pgdg-centos95-9.5-2.noarch.rpm: ヘッダー V4 DSA/SHA1 Signature、鍵 ID XXXXXXXX: NOKEY
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:pgdg-centos95-9.5-2              ################################# [100%]

RPMのインストールが終わったら、pgdg-95-centos.repoファイルが「/etc/yum.repo.d/」配下にインストールされたかチェックします。「ls -l」コマンドで「/etc/yum.repo.d/」ディレクトリの中を表示してみます。

# ls -l /etc/yum.repos.d/
合計 32
-rw-r--r--. 1 root root 1664 12月  9 18:59 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 12月  9 18:59 CentOS-CR.repo
-rw-r--r--. 1 root root  649 12月  9 18:59 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  630 12月  9 18:59 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 12月  9 18:59 CentOS-Sources.repo
-rw-r--r--. 1 root root 1952 12月  9 18:59 CentOS-Vault.repo
-rw-r--r--. 1 root root  290 12月  9 18:59 CentOS-fasttrack.repo
-rw-r--r--. 1 root root  482 10月 21  2015 pgdg-95-centos.repo

「pgdg-95-centos.repo」ファイルが存在することが確認できます。

PostgreSQLのインストール

ここまでで、yumでPostgreSQLをインストールするための準備が整いました。
早速、yumコマンドを実行してみましょう。

# yum -y install postgresql95-server postgresql95-devel postgresql95-contrib

 ~ 省略 ~
インストール:
  postgresql95-contrib.x86_64 0:9.5.2-1PGDG.rhel7
  postgresql95-devel.x86_64 0:9.5.2-1PGDG.rhel7
  postgresql95-server.x86_64 0:9.5.2-1PGDG.rhel7

依存性関連をインストールしました:
  libxslt.x86_64 0:1.1.28-5.el7
  postgresql95.x86_64 0:9.5.2-1PGDG.rhel7
  postgresql95-libs.x86_64 0:9.5.2-1PGDG.rhel7

完了しました!

「yum install postgresql-server」コマンドを実行すれば、必要な依存パッケージも同時にインストールしてれくるので、必要ものは揃います。また、「postgresql-contrib」や「postgresql-devel」も便利なコマンドやアプリケーション開発に必要なヘッダーやライブラリが含まれているので、一緒にインストールしておきます。

以上で、PostgreSQLのインストールは完了です。

]]>
http://db-study.com/archives/109/feed 0
PostgreSQLと他RDBMSの比較 http://db-study.com/archives/87 http://db-study.com/archives/87#respond Sun, 01 May 2016 12:08:39 +0000 http://db-study.com/?p=87 PostgreSQLと言えば、MySQLと比べられ、MySQLの方が機能は少ないにもかかわらず、シェアでは圧倒されてきたイメージがあります。

しかし、近年、PostgreSQLが大規模システムに採用される事例が増え、その人気が高まっています。

データベースが稼動した状態でバックアップを取得するオンラインバックアップや処理時間や負荷を軽減するストアドプロシージャなどの機能も標準搭載しており、オープンソースなデータベースであっても、その機能はもはや商用データベースに何ら遜色はなく、小・中規模だけでなく大規模なシステムに対しても十分に対応できるデータベースであると言えます。

PostgreSQL9.0では、いくつかの新機能追加と性能改善が盛り込まれましたが、それもより大規模なシステムでPostgreSQLを適用できるようにするためのものです。

例えば、以前までのバージョンではPostgreSQL本体にレプリケーション機能がなかったため、pgpool-II, Slony-Iといったサードパーティ製のミドルウェアと組み合わせる必要がありましたが、9.0からPostgreSQLのみで手軽にレプリケーションを実現できるようになりました。

※レプリケーションとは、データベース管理システムが持つ機能の一つで、複数のサーバーにデータベースを自動的に複製する機能のことです。

また、PostgreSQLが特に強みとする、GIS (地理情報システム)向けの機能もサードパーティの製品と組み合わせて、地図検索システムなどで豊富な利用実績を重ねています。

商用RDBMSとの比較

機能や性能は商用RDBMSに遜色ないと前述しましたが、さすがに、Oracle DatabaseやDB2には及ばないでしょう。
Oracle RACなどのクラスタリング構成にすれば、お金をかければそれだけ性能は向上してきます。

ただ、シェアの高い商用RDBMSはライセンス料がものすごく高いです。数百万とかは軽くいきますし、オプション製品も含めると、普通の感覚では逃避したい値段になります。

また、DB製品が導入されるサーバー上に搭載されているプロセッサ(CPU)の総数によってライセンス料が変わったり、製品の使用が特定の期間内に制限され、期限が切れたら、その製品の使用を停止するか、契約を延長する必要があるなど、とにかくコストがかかります。

その点、PostgreSQLはソフトウェアライセンスは無償であり、十分な機能を持ちながらも低コストで導入できます。

ただ、商用RDBMSはベンダーのサポートが受けられるというのは結構重要なポイントです。商用だろうがオープンソースであろうが、製品の問題はよく起こります。製品不具合の場合は、内容によってはすぐにパッチを提供してもらわないと困ることがあります。また、ソフトウェアの使用方法や障害時の原因究明などをベンダーから教えてもらったり、依頼することができるので、運用面における、その点のメリットは大きいです。(対応のスピードや内容に不満を持つことも多々ありますが。)

とはいうものの、PostgreSQLも商用サポートを行っている企業がありますので、そのようなサポートを利用するのもひとつの手段です。

PostgreSQLに関する情報も豊富にあり、情報収集に困ることはないでしょう。
また、日本PostgreSQLユーザー会(JPUG)というボランティア団体が公開しているWebサイト「Let’s Pogtgres」には、性能分析や性能チューニングなど有益な情報が公開されています。

MySQLとの比較

オープンソースのRDBMSとしては、PostgreSQLとMySQLがほぼデファクトスタンダードになっていると言っても過言ではないでしょう。そのせいか、PostgreSQLとMySQLはよく比較されます。

機能の多さはPostgreSQL、性能はMySQLに軍配が上がるなどと言われています。

しかし、両RDBMSともにバージョンアップによる機能改善や追加がどんどんされていますので、それらの情報もすぐに古くなってしまいます。

結局、どちらも甲乙つけがたいのが実態です。

ただ、MySQLを買収していたSunをOracleが買収したことで、MySQLの開発者が去っていったとの噂があり、PostgreSQLの方が未来は明るいと言えるのかもしれません。

]]>
http://db-study.com/archives/87/feed 0
PostgreSQLとは http://db-study.com/archives/85 http://db-study.com/archives/85#respond Sat, 30 Apr 2016 11:08:46 +0000 http://db-study.com/?p=85 PostgreSQL(ポストグレスキューエル)は、オープンソースのRDBMSです。本格的なRDBMSであり、様々な用途で利用されています。

オープンソースなので全てのソースは公開されており、商用利用の場合も無料で利用できます。また、LinuxなどのUNIX互換OSはもちろんのこと、Windowsにも対応しています。

読み方は「ポストグレスキューエル」ですが、「ポストグレス」や「ポスグレ」と呼ばれることも多いです。

世界市場におけるシェアはオープンソースDBの中では2012年時点で14%程度に留まっていましたが、近年、PostgreSQLがそのシェアを伸ばしてきています。

PostgreSQLの歴史

PostgreSQLは、1986年、カリフォルニア大学バークリー校で、その前身であるpostgresプロジェクトから始まりました。

postgres 1986年にpostgresという名で、主に研究目的で開発される。データの操作はSQL言語ではなく、POSTQUELという専用の言語で操作する。postgresプロジェクトはバージョン4.2を最後に1993年に解散。
Postgres95 postgresの開発終了後、 1994年に、カリフォルニア大学バークリー校の大学院生であったAndrew Yuと Jolly Chenにより改良される。この改良により、巨大化していたソースコードが整理されるとともに、POSTQUELからSQL言語を使用するようになった。
PostgreSQL 1996年にPostgres95プロジェクトは、プロジェクトの名称を、SQL言語をサポートしているという意味をこめてPostgreSQLに変更される。1997年1月にPostgreSQLプロジェクトとしての最初のバージョンである、PostgreSQLバージョン6.0 が公開された。このときから、インターネットを通じて世界中のデータベース開発者のグループがPostgreSQLの開発に参加し、共同作業によるプロジェクトをうまく調整する体制ができあがった。

postgresプロジェクトから始まって30年以上経ちますが、その間、PostgreSQLは世界中の開発者により改良が続けられ、現在では商用RDBMSと比べても遜色ない性能、機能、信頼性を持ち合わせるRDBMSとなっています。

]]>
http://db-study.com/archives/85/feed 0