PostgreSQLまたはPostgresは、複雑なWebアプリケーションを作成できる多くの高度な機能を備えたオープンソースの汎用オブジェクトリレーショナルデータベース管理システムです。
このチュートリアルでは、CentOS7マシンにPostgreSQLをインストールする方法について2つの異なる方法を紹介します。最初の方法では、CentOSリポジトリからPostgreSQL v9.2.23をインストールするために必要な手順を説明し、2番目の方法では、公式のPostgreSQLリポジトリから最新バージョンのPostgreSQLをインストールする方法を示します。
アプリケーションが最新バージョンを必要としない場合は、最初の方法を使用して、CentOSリポジトリからPostgreSQLをインストールすることをお勧めします。
また、PostgreSQLデータベース管理の基本についても説明します。
前提条件#
このチュートリアルを続行する前に、sudo権限を持つユーザーとしてログインしていることを確認してください。
CentOSリポジトリからPostgreSQLをインストールします#
この記事を書いている時点で、CentOSリポジトリから入手できるPostgreSQLの最新バージョンはPostgreSQLバージョン9.2.23です。
CentOSサーバーにPostgreSQLをインストールするには、以下の手順に従います。
-
PostgreSQLのインストール
PostgreSQLデータベースにいくつかの追加機能を提供するPostgreSQLcontribパッケージと一緒にPostgreSQLサーバーをインストールするには、次のように入力します。
sudo yum install postgresql-server postgresql-contrib
-
データベースの初期化
次のコマンドを使用してPostgreSQLデータベースを初期化します。
sudo postgresql-setup initdb
Initializing database ... OK
-
PostgreSQLの起動
PostgreSQLサービスを開始し、起動時に開始できるようにするには、次のように入力します。
sudo systemctl start postgresql
sudo systemctl enable postgresql
-
PostgreSQLのインストールの確認
インストールを確認するために、
psql
を使用してPostgreSQLデータベースサーバーに接続しようとします。 ツールを使用してサーバーバージョンを印刷します:sudo -u postgres psql -c "SELECT version();"
PostgreSQL 9.2.23 on x86_64-redhat-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16), 64-bit (1 row)
PostgreSQLリポジトリからPostgreSQLをインストールします#
この記事を書いている時点で、公式のPostgreSQLリポジトリから入手できるPostgreSQLの最新バージョンはPostgreSQLバージョン10.4です。次のステップに進む前に、PostgreSQL Yumリポジトリページにアクセスして、新しいバージョンが利用可能かどうかを確認する必要があります。
以下の手順に従って、CentOSサーバーに最新のPostgreSQLバージョンをインストールします:
-
PostgreSQLリポジトリの有効化
PostgreSQLリポジトリを有効にするには、リポジトリ
rpm
をインストールするだけです。 ファイル:sudo yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm
-
PostgreSQLのインストール
リポジトリが有効になったら、次のコマンドを使用してPostgreSQLサーバーとPostgreSQLcontribパッケージをインストールします。
sudo yum install postgresql10-server postgresql10-contrib
-
データベースの初期化
PostgreSQLデータベースタイプを初期化するには:
sudo /usr/pgsql-10/bin/postgresql-10-setup initdb
Initializing database ... OK
-
PostgreSQLの起動
PostgreSQLサービスを開始し、ブートタイプで開始できるようにするには:
sudo systemctl start postgresql-10
sudo systemctl enable postgresql-10
-
PostgreSQLのインストールの確認
インストールを確認するために、
psql
を使用してPostgreSQLデータベースサーバーに接続しようとします。 ツールを使用してサーバーバージョンを印刷します:sudo -u postgres /usr/pgsql-10/bin/psql -c "SELECT version();"
PostgreSQL 10.4 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28), 64-bit (1 row)
PostgreSQLの役割と認証方法#
PostgreSQL内のデータベースアクセス許可は、ロールの概念で処理されます。ロールは、データベースユーザーまたはデータベースユーザーのグループを表すことができます。
PostgreSQLは複数の認証方法をサポートしています。最も一般的に使用される方法は次のとおりです。
- 信頼-この方法では、
pg_hba.conf
で定義された基準がある限り、役割はパスワードなしで接続できます。 満たされています。 - パスワード-役割はパスワードを提供することで接続できます。パスワードは
scram-sha-256
として保存できますmd5
およびpassword
(クリアテキスト)。 - Ident-このメソッドはTCP/IP接続でのみサポートされます。これは、オプションのユーザー名マッピングを使用して、クライアントのオペレーティングシステムのユーザー名を取得することで機能します。
- ピア-Identと同じですが、ローカル接続でのみサポートされます。
PostgreSQLクライアント認証は、pg_hba.conf
という名前の構成ファイルで定義されています。 。デフォルトでは、ローカル接続の場合、PostgreSQLはピア認証方式を使用するように設定されています。
postgres
PostgreSQLをインストールすると、ユーザーが自動的に作成されます。このユーザーはPostgreSQLインスタンスのスーパーユーザーであり、MySQLルートユーザーと同等です。
postgresユーザーとしてPostgreSQLサーバーにログインするには、最初にuserpostgresに切り替えてから、psql
を使用してPostgreSQLプロンプトにアクセスする必要があります。 ユーティリティ:
sudo su - postgres
psql
ここから、PostgreSQLインスタンスを操作できます。 PostgreSQLシェルを終了するには、次のように入力します。
\q
sudo
を使用して、ユーザーを切り替えることなくPostgreSQLプロンプトにアクセスすることもできます。 コマンド:
sudo -u postgres psql
postgres
ユーザーは通常、ローカルホストからのみ使用されるため、このユーザーのパスワードを設定しないことをお勧めします。
psql
へのフルパスを使用する必要があります。 /usr/pgsql-10/bin/psql
であるバイナリ 。 PostgreSQLの役割とデータベースの作成#
CREATEROLE
を持つスーパーユーザーとロールのみ 特権は新しい役割を作成できます。
次の例では、john
という名前の新しいロールを作成します johndb
という名前のデータベース データベースに対する特権を付与します。
-
PostgreSQLシェルに接続する
sudo -u postgres psql
-
新しいPostgreSQLロールを作成する
次のコマンドは、「john」という名前の新しいロールを作成します。
CREATE ROLE john;
-
新しいPostgreSQLデータベースを作成する
createdb
を使用して、「johndb」という名前の新しいデータベースを作成します コマンド:CREATE DATABASE johndb;
-
特権を付与する
john
に権限を付与するには 前の手順で作成したデータベースのユーザーは、次のクエリを実行します。GRANT ALL PRIVILEGES ON DATABASE johndb TO john;
PostgreSQLサーバーへのリモートアクセスを有効にする#
デフォルトでは、PostgreSQLサーバーはローカルインターフェース127.0.0.1
でのみリッスンします 。 PostgreSQLサーバーへのリモートアクセスを有効にするには、構成ファイルpostgresql.conf
を開きます。 listen_addresses = '*'
を追加します CONNECTIONS AND AUTHENTICATION
セクション。
sudo vim /var/lib/pgsql/data/postgresql.conf
PostgreSQLバージョン10を実行している場合、ファイルへのパスは/var/lib/pgsql/10/data/postgresql.conf
です。 ./var/lib/pgsql/data/postgresql.conf #------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
ファイルを保存し、次のコマンドでPostgreSQLサービスを再起動します。
sudo systemctl restart postgresql
PostgreSQLバージョン10を実行している場合は、systemctl restart postgresql-10
を使用してPostgreSQLサービスを再起動します。 。
ss
で変更を確認します ユーティリティ:
ss -nlt | grep 5432
LISTEN 0 128 0.0.0.0:5432 0.0.0.0:*
LISTEN 0 128 [::]:5432 [::]:*
上記の出力からわかるように、PostgreSQLサーバーはすべてのインターフェース(0.0.0.0)をリッスンしています。
最後のステップは、pg_hba.conf
を編集して、リモート接続を受け入れるようにサーバーを構成することです。 ファイル。
以下は、さまざまなユースケースを示すいくつかの例です。
/var/lib/pgsql/data/pg_hba.conf# TYPE DATABASE USER ADDRESS METHOD
# The user jane will be able to access all databases from all locations using a md5 password
host all jane 0.0.0.0/0 md5
# The user jane will be able to access only the janedb from all locations using a md5 password
host janedb jane 0.0.0.0/0 md5
# The user jane will be able to access all databases from a trusted location (192.168.1.134) without a password
host all jane 192.168.1.134 trust
PostgreSQLバージョン10を実行している場合、ファイルへのフルパスは/var/lib/pgsql/10/data/pg_hba.conf
です。 。