PostgreSQLは、単にPostgresと呼ばれることが多く、オープンソースの汎用オブジェクトリレーショナルデータベース管理システムです。オンラインバックアップ、ポイントインタイムリカバリ、ネストされたトランザクション、SQLおよびJSONクエリ、マルチバージョン同時実行制御(MVCC)、非同期レプリケーションなど、多くの強力な機能があります。
このチュートリアルでは、PostgreSQLデータベースサーバーをDebian 10にインストールする手順について説明します。また、基本的なデータベース管理の基本についても説明します。
PostgreSQLのインストール#
この記事を書いている時点で、デフォルトのDebianリポジトリから入手できるPostgreSQLの最新バージョンはPostgreSQLバージョン11.5です。
DebianサーバーにPostgreSQLをインストールするには、rootまたはsudo権限を持つユーザーとして次の手順を実行します。
-
APTパッケージインデックスを更新することから始めます:
sudo apt update
-
PostgreSQLデータベースに追加機能を提供するPostgreSQLサーバーとcontribパッケージをインストールします。
sudo apt install postgresql postgresql-contrib
-
インストールが完了すると、PostgreSQLサービスが開始されます。インストールを確認するには、
psql
を使用します サーバーバージョンを印刷するためのツール:sudo -u postgres psql -c "SELECT version();"
出力は次のようになります。
PostgreSQL 11.5 (Debian 11.5-1+deb10u1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
psql
は、PostgreSQLサーバーと対話できるインタラクティブなターミナルプログラムです。 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
ユーザーは通常、ローカルホストからのみ使用されます。
PostgreSQLの役割とデータベースの作成#
createuser
コマンドを使用すると、コマンドラインから新しい役割を作成できます。 CREATEROLE
を持つスーパーユーザーとロールのみ 特権は新しい役割を作成できます。
次の例では、kylo
という名前の新しい役割を作成します 、kylodb
という名前のデータベース データベースに対する特権をロールに付与します。
-
まず、次のコマンドを発行してロールを作成します。
sudo su - postgres -c "createuser kylo"
-
次に、
createdb
を使用してデータベースを作成します コマンド:sudo su - postgres -c "createdb kylodb"
-
データベース上のユーザーに権限を付与するには、PostgreSQLシェルに接続します。
sudo -u postgres psql
次のクエリを実行します:
GRANT ALL PRIVILEGES ON DATABASE kylodb TO kylo;
PostgreSQLサーバーへのリモートアクセスを有効にする#
デフォルトでは、PostgreSQLサーバーはローカルインターフェース127.0.0.1
でのみリッスンします 。
リモートの場所からPostgreSQLサーバーに接続する場合は、パブリックインターフェイスでリッスンするようにサーバーを設定し、リモート接続を受け入れるように構成を編集する必要があります。
構成ファイルpostgresql.conf
を開きます listen_addresses = '*'
を追加します CONNECTIONS AND AUTHENTICATION
セクション。これにより、すべてのネットワークインターフェイスでリッスンするようにサーバーに指示されます。
sudo nano /etc/postgresql/11/main/postgresql.conf
/etc/postgresql/11/main/postgresql.conf #------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
ファイルを保存し、PostgreSQLサービスを再起動して、変更を有効にします。
sudo service postgresql restart
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
を編集して、リモートログインを受け入れるようにサーバーを構成することです。 ファイル。
以下は、さまざまなユースケースを示すいくつかの例です。
/etc/postgresql/11/main/pg_hba.conf# TYPE DATABASE USER ADDRESS METHOD
# The user jane will be able to access all databases from all locations using an 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 an 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