kakiro-webカキローウェブ

システム開発情報とコンピューター書籍の紹介サイト

CentOS7.1 64bitのyumリポジトリにPostgreSQLを追加し、最新バージョンをインストール

CentOS7.1の64bit版のyumリポジトリにPostgreSQLを追加し、最新バージョンをインストールする方法を以下に示します。

※CentOS6 64bitをご使用の場合は、当サイトのCentOS6 64bitのyumリポジトリにPostgreSQLを追加し、最新バージョンをインストールのページをご覧ください。

CentOS7.1の標準リポジトリからインストールできるPostgreSQLのバージョンは、9.2.14と古いものになっています。PostgreSQLのyumリポジトリを利用することで、最新バージョンのPostgreSQLをyumコマンドによりインストールすることができるようになります。

※PostgreSQLをRPMからインストールすることも可能です。詳細は当サイトのCentOS7 64bitにPostgreSQLをRPMからインストールのページをご覧ください。

以下の各コマンドで、プロンプトが「#」で開始しているものはrootユーザーでの実行、「$」で開始しているものは一般ユーザーでの実行となります。

PostgreSQLのリポジトリ設定パッケージをダウンロード

以下のコマンドを実行して、PostgreSQLのリポジトリ設定パッケージのダウンロードを行います。

※ダウンロード元のURLは、PostgreSQLの公式サイトから遷移できるyumリポジトリのダウンロードページにリンクがあります。

※ここでは、PostgreSQL9.4をCentOS7 64bit用のリンクからダウンロードしています。

$ wget http://yum.postgresql.org/9.4/redhat/rhel-7-x86_64/pgdg-centos94-9.4-2.noarch.rpm

PostgreSQLのリポジトリのインストール

以下のコマンドを実行して、PostgreSQLのリポジトリ設定パッケージのインストールを行います。

# rpm -Uvh pgdg-centos94-9.4-2.noarch.rpm

デフォルトの設定では、yumコマンドの実行時にPostgreSQLのリポジトリは、自動的に使用されるようになっています。明示的に使用されるようにしたい場合は、インストールされたPostgreSQLのリポジトリの設定ファイル「/etc/yum.repos.d/pgdg-94-centos.repo」を、以下のように編集します。

[pgdg94]
:(略)
enabled=1
↓変更
enabled=0

yumコマンドの実行時にPostgreSQL9.4のリポジトリを使用するには、以下のようにオプション「--enablerepo=pgdg94」を付けて実行します。

# yum --enablerepo=pgdg94 list | grep postgresql

PostgreSQLのインストール

以下のコマンドを実行して、PostgreSQL9.4の最新バージョンのインストールを行うことができます。

# yum --enablerepo=pgdg94 install postgresql94-server

データベースの初期化

PostgreSQLをインストール後、初めにデータベースの初期化を行う必要があります。

以下のコマンドを実行して、データベースの初期化を行います。

# /usr/pgsql-9.4/bin/postgresql94-setup initdb

インストール後の設定

PostgreSQLのサービスを起動

以下のコマンドを実行して、PostgreSQLのサービスを起動することができます。

# systemctl start postgresql-9.4.service

尚、サービス名は以下のコマンドで確認することができます。

# rpm -ql postgresql94-server | grep /usr/lib/systemd/system/
/usr/lib/systemd/system/postgresql-9.4.service

サービスの起動時に、以下のようなエラーになってしまう場合、

Job for postgresql-9.4.service failed. See 'systemctl status postgresql-9.4.service' and 'journalctl -xn' for details.

以下のコマンドを実行して、エラーの内容を確認します。

# systemctl -l status postgresql-9.4.service

以下のようなメッセージが出力されている場合は、データベースの初期化が行われていませんので、上記にも記載しているようにデータベースの初期化を行ってください。

"/var/lib/pgsql/9.4/data/" is missing or empty.
Use "/usr/pgsql-9.4/bin/postgresql94-setup initdb" to initialize the database cluster.

PostgreSQLのサービスを自動で起動させる

PostgreSQLのサービスは、インストール時点では自動で起動するようになっていません。

自動起動設定の状態は、以下のコマンドで確認できます。

# systemctl is-enabled postgresql-9.4.service
disabled

※自動起動する設定になっている場合は「enabled」、なっていない場合は「disabled」と表示されます。

自動起動する設定になっていない場合、以下のコマンドで自動で起動するように設定できます。

# systemctl enable postgresql-9.4.service

自動起動しないようにしたい場合は、以下のコマンドを実行します。

# systemctl disable postgresql-9.4.service

PostgreSQLへの接続

PostgreSQLへの接続の認証に関する設定は、PostgreSQLの設定ファイル「/var/lib/pgsql/9.4/data/postgresql.conf」と「/var/lib/pgsql/9.4/data/pg_hba.conf」で行われています。

デフォルトの設定は、以下のようになっています。

「postgresql.conf」の接続の認証に関するデフォルトの設定。

#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

#listen_addresses = 'localhost'         # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
  • 「listen_addresses」は、接続を待ち受けるサーバーのIPアドレスの設定になります。

    未設定の場合は、ローカルのIPアドレス(IPv4では127.0.0.1、IPv6では::1)で接続を待ち受けるようになり、ローカルからの接続のみが可能となります。

「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
# IPv6 local connections:
host    all             all             ::1/128                 ident
  • 「pg_hba.conf」では、「TYPE」(接続形式)、「DATABASE」(接続先のデータベース)、「USER」(データベース接続ユーザー)、「ADDRESS」(接続元のIPアドレス)、「METHOD」(認証方式)を指定して、接続の可否の設定を行います。

  • 「TYPE」に「local」と指定された設定は、Unixドメインソケットを使用した接続になります。

    ここでは、全てのデータベース(「DATABASE」が「all」)、全てのデータベース接続ユーザー(「USER」が「all」)に対する設定となっています。

    認証方式に「peer」と指定すると、ローカルからの接続で、接続元のオペレーティングシステムで使用しているユーザー名が、接続するデータベースのユーザー名と同じになっている場合に、接続が許可されるようになります。

  • 「TYPE」に「host」と指定された設定は、TCP/IPを使用した接続になります。

    「ADDRESS」に「127.0.0.1/32」と指定されている設定は、IPv4でのローカルからの接続によるものになり、「::1/128」と指定されている設定は、IPv6でのローカルからの接続によるものになります。

    IPv4、IPv6共に、全てのデータベース(「DATABASE」が「all」)、全てのデータベース接続ユーザー(「USER」が「all」)に対する設定となっています。

    認証方式に「ident」と指定すると、identサーバー(ポート113)を使用した認証となります。CentOS7.1をMinimalでインストールした場合は、identサーバーは起動されておらず、ident認証では接続できないようです。

PostgreSQLをインストールすると、データベース「postgres」、データベース接続ユーザー「postgres」が作成され、CentOS上にもユーザー「postgres」が作成されます。

よって、PostgreSQLのインストール後の最初の接続は、ローカルからUnixドメインソケットで、ユーザー「postgres」を使用したpeer認証で行うことができます。

接続するには、以下のようなコマンドを実行します。

# su - postgres
$ psql
  • 「su」コマンドで、ユーザーを「postgres」に切り替えます。

    CentOS上のユーザーを「postgres」に切り替えることで、データベース接続ユーザー「postgres」でのpeer認証が可能となります。

  • 「psql」は、PostgreSQLに付属にしているコマンドで、SQLの実行等を行う際に使用するものになります。

    接続先のデータベース、データベース接続ユーザーは共に「postgres」となり、CentOS上のユーザーと同じになるため、オプションでの指定は省略できるようになっています。

    オプションで接続先のデータベースを指定する場合は、「-d postgres」、データベース接続ユーザーを指定する場合は、「-U postgres」となります。

    尚、オプションで接続先のホストを「-h 127.0.0.1」のように指定すると、IPv4での接続となりますが、ident認証は行えないため、接続することはできません。また、接続先のホストを「-h localhost」と指定するとIPv6での接続となりますが、同様にident認証は行えないため、接続することはできません。

postgresユーザーにパスワードを設定

デフォルトでは、postgresユーザーにパスワードが設定されていません。以下のようなステートメントを実行して、パスワードの設定を行うことができます。

postgres=# ALTER ROLE postgres PASSWORD 'xxxxxxxxxx';

※「xxxxxxxxxx」には、設定したいパスワードを指定します。

パスワードの暗号化に関する指定については、当サイトのPostgreSQL データベース接続ユーザーの作成のページをご覧ください。

PostgreSQLへの外部からのアクセスを許可

PostgreSQLへの接続のところでも記載しましたが、PostgreSQLへの接続の認証に関する設定は、PostgreSQLの設定ファイル「/var/lib/pgsql/9.4/data/postgresql.conf」と「/var/lib/pgsql/9.4/data/pg_hba.conf」で行われており、デフォルトではローカルからのUnixドメインソケットを使用した接続のみが可能となっています。

外部からのアクセスを可能とするには、これらを編集します。

「postgresql.conf」を以下のように編集します。

#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

#listen_addresses = 'localhost'         # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
↓変更
listen_addresses = '*'
  • 「listen_addresses = '*'」と指定すると、サーバーに設定されている全てのIPアドレスで接続を待ち受けるようになります。

    サーバーに複数のIPアドレスが設定されている場合、「listen_addresses = '192.168.1.11'」のように指定することで、特定のIPアドレスでのみ、接続を待ち受けるようにすることができます。

「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             0.0.0.0/0               md5
  • 「TYPE」に「host」と指定された設定は、TCP/IPを使用した接続になります。

  • 「ADDRESS」に「0.0.0.0/0」と指定すると、IPv4の全てのホストからの接続が可能となります。

    尚、「ADDRESS」に「192.168.1.101/32」のように指定することで、特定のIPアドレスからのみ、接続を可能とすることができます。

  • 全てのデータベース(「DATABASE」が「all」)、全てのデータベース接続ユーザー(「USER」が「all」)に対する設定となっています。

    「USER」に「user01」のように指定すると、外部からのアクセスが可能なユーザーを「user01」のみにすることができます。

    この場合も、「TYPE」が「local」の設定により、ローカルからはユーザー「postgres」による接続は可能となります。

  • PostgreSQLへの接続のところでも記載しましたが、認証方式に「ident」を指定していると、接続は行えないようです。

    認証方式に「md5」と指定すると、パスワード認証を使用し、パスワードはMD5でハッシュ化されて送信されるようになります。

    尚、認証方式に「password」と指定した場合も、パスワード認証となりますが、パスワードが平文で送信されますので、セキュリティ面で使用しないほうがよいです。

    また、認証方式に「trust」と指定することで、パスワードの指定なしで接続可能とすることもできます。

また、PostgreSQLへの外部からのアクセスは、iptablesによってデフォルトでは拒否されています。CentOS7になってiptablesの設定には、firewalldを使用するようになっています。

firewalldによるPostgreSQLへの外部アクセス許可の設定については、当サイトのCentOS7 64bit firewalldによるアクセス制御のページをご覧ください。

データベース接続ユーザーの作成

データベース接続ユーザーの作成については、当サイトのPostgreSQL データベース接続ユーザーの作成のページをご覧ください。

データベースの作成

データベースの作成については、当サイトのPostgreSQL データベースの作成のページをご覧ください。

テーブルの作成

テーブルの作成については、当サイトのPostgreSQL テーブルの作成のページをご覧ください。

実行されたSQLをログに出力

実行されたSQLのログ出力については、当サイトの以下のページをご覧ください。

データベースのバックアップとリストア

データベースのバックアップとリストアについては、当サイトの以下のページをご覧ください。

yumリポジトリにPostgreSQLを追加し、最新バージョンをインストールについては、以上です。

SQLのテクニックに関するおすすめの書籍

当サイトの書籍紹介ページで、SQLのテクニックに関するおすすめの書籍の紹介も行っておりますので、ご覧ください。

SQLのパフォーマンスに関するおすすめの書籍

当サイトの書籍紹介ページで、SQLのパフォーマンスに関するおすすめの書籍の紹介も行っておりますので、ご覧ください。

DB設計、SQLに関するおすすめの書籍

当サイトの書籍紹介ページで、DB設計、SQLに関するおすすめの書籍の紹介も行っておりますので、ご覧ください。