
PostgreSQLまたはPostgresは、フォールトトレラントな環境や複雑なアプリケーションを構築できる多くの高度な機能を備えたオープンソースの汎用オブジェクトリレーショナルデータベース管理システムです。
このガイドでは、CentOS 8にPostgreSQLデータベースサーバーをインストールする方法について説明します。インストールするバージョンを選択する前に、アプリケーションがそれをサポートしていることを確認してください。
また、PostgreSQLデータベース管理の基本についても説明します。
前提条件#
パッケージをインストールするには、rootまたはsudo権限を持つユーザーとしてログインする必要があります。
CentOS 8へのPostgreSQLのインストール#
この記事の執筆時点では、標準のCentOSリポジトリからインストールできるPostgreSQLサーバーにはバージョン9.6と10.0の2つのバージョンがあります。
使用可能なPostgreSQLモジュールストリームを一覧表示するには、次のように入力します。
dnf module list postgresql
出力は、postgresqlモジュールが2つのストリームで利用可能であることを示しています。各ストリームには、サーバーとクライアントの2つのプロファイルがあります。プロファイルサーバーを備えたストリーム10がデフォルトです:
CentOS-8 - AppStream
Name Stream Profiles Summary
postgresql 10 [d] client, server [d] PostgreSQL server and client module
postgresql 9.6 client, server [d] PostgreSQL server and client module
-
デフォルトのストリームをインストールするには、PostgreSQLサーバーバージョン10.0に次のように入力します。
sudo dnf install @postgresql:10
-
PostgreSQLサーバーバージョン9.6をインストールするには、次のように入力します。
sudo dnf install @postgresql:9.6
PostgreSQLデータベースシステムにいくつかの追加機能を提供するcontribパッケージをインストールすることもできます。
sudo dnf install postgresql-contrib
インストールが完了したら、次のコマンドを使用してPostgreSQLデータベースを初期化します。
sudo postgresql-setup initdb
Initializing database ... OK
PostgreSQLサービスを開始し、起動時に開始できるようにします:
sudo systemctl enable --now postgresql
psql
を使用します PostgreSQLデータベースサーバーに接続してインストールを確認し、そのバージョンを印刷するためのツール:
sudo -u postgres psql -c "SELECT version();"
PostgreSQL 10.6 on x86_64-redhat-linux-gnu, compiled by gcc (GCC) 8.2.1 20180905 (Red Hat 8.2.1-3), 64-bit
PostgreSQLの役割と認証方法#
PostgreSQLは、ロールの概念を使用してデータベースアクセス許可を処理します。ロールは、データベースユーザーまたはデータベースユーザーのグループを表すことができます。
PostgreSQLは複数の認証方法をサポートしています。最も一般的に使用される方法は次のとおりです。
- 信頼-
pg_hba.conf
で定義されている条件である限り、ロールはパスワードなしで接続できます。 満たされています。 - パスワード-役割はパスワードを提供することで接続できます。パスワードは
scram-sha-256
として保存できます 、md5
、およびpassword
(クリアテキスト)。 - Ident-TCP/IP接続でのみサポートされます。これは、オプションのユーザー名マッピングを使用して、クライアントのオペレーティングシステムのユーザー名を取得することで機能します。
- ピア-Identと同じですが、ローカル接続でのみサポートされます。
PostgreSQLクライアント認証は、pg_hba.conf
という名前の構成ファイルで定義されています。 。デフォルトでは、ローカル接続の場合、PostgreSQLはピア認証方式を使用するように設定されています。
postgres
PostgreSQLサーバーをインストールすると、ユーザーが自動的に作成されます。このユーザーは、PostgreSQLインスタンスのスーパーユーザーです。 MySQLのrootユーザーと同等です。
postgres
としてPostgreSQLサーバーにログインするには ユーザー、最初にユーザーに切り替えてから、psql
を使用してPostgreSQLプロンプトにアクセスします ユーティリティ:
sudo su - postgres
psql
ここから、PostgreSQLインスタンスを操作できます。 PostgreSQLシェルを終了するには、次のように入力します。
\q
sudo
を使用してユーザーを切り替えることなく、PostgreSQLプロンプトにアクセスすることもできます。 コマンド:
sudo -u postgres psql
通常、postgres
ユーザーはローカルホストからのみ使用されます。
PostgreSQLの役割とデータベースの作成#
CREATEROLE
を持つスーパーユーザーとロールのみ 特権は新しい役割を作成できます。
次の例では、john
という名前の新しいロールを作成します 、johndb
という名前のデータベース 、およびデータベースに対する特権を付与します。
-
まず、PostgreSQLシェルに接続します:
sudo -u postgres psql
-
次のコマンドを使用して、新しいPostgreSQLロールを作成します。
CREATE ROLE john;
-
新しいデータベースを作成します:
CREATE DATABASE johndb;
-
次のクエリを実行して、データベース上のユーザーに権限を付与します。
GRANT ALL PRIVILEGES ON DATABASE johndb TO john;
PostgreSQLサーバーへのリモートアクセスを有効にする#
デフォルトでは、PostgreSQLサーバーはローカルインターフェース127.0.0.1
でのみリッスンします 。
PostgreSQLサーバーへのリモートアクセスを有効にするには、構成ファイルを開きます。
sudo nano /var/lib/pgsql/data/postgresql.conf
CONNECTIONS AND AUTHENTICATION
まで下にスクロールします セクションを作成し、次の行を追加/編集します:
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
ファイルを保存し、次のコマンドでPostgreSQLサービスを再起動します。
sudo systemctl restart 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 can access all databases from all locations using an md5 password
host all jane 0.0.0.0/0 md5
# The user jane can access only the janedb database from all locations using an md5 password
host janedb jane 0.0.0.0/0 md5
# The user jane can access all databases from a trusted location (192.168.1.134) without a password
host all jane 192.168.1.134 trust