PostgreSQLは、単にPostgresと呼ばれることが多く、オープンソースの汎用オブジェクトリレーショナルデータベース管理システムです。 PostgreSQLには、オンラインバックアップ、ポイントインタイムリカバリ、ネストされたトランザクション、SQLおよびJSONクエリ、マルチバージョン同時実行制御(MVCC)、非同期レプリケーションなどの多くの高度な機能があります。
このチュートリアルでは、PostgreSQLをDebian 9にインストールする方法を示し、基本的なデータベース管理の基礎を探ります。
前提条件#
このチュートリアルに進む前に、ログインしているユーザーがsudo権限を持っていることを確認してください。
PostgreSQLのインストール#
この記事を書いている時点で、Debianリポジトリから入手できるPostgreSQLの最新バージョンはPostgreSQLバージョン9.6です。
DebianサーバーにPostgreSQLをインストールするには、次の手順を実行します。
-
ローカルパッケージインデックスを更新することから始めます:
sudo apt update
-
PostgreSQLサーバーとPostgreSQLデータベースに追加機能を提供するPostgreSQLcontribパッケージをインストールします。
sudo apt install postgresql postgresql-contrib
-
インストールが完了すると、PostgreSQLサービスが自動的に開始されます。インストールを確認するために、
psql
を使用してPostgreSQLデータベースサーバーに接続します ユーティリティとサーバーバージョンの印刷:sudo -u postgres psql -c "SELECT version();"
出力は次のようになります:
version ----------------------------------------------------------------------------------------------------------- PostgreSQL 9.6.10 on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516, 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
ユーザーは通常、ローカルホストからのみ使用されるため、このユーザーのパスワードを設定しないことをお勧めします。
PostgreSQLの役割とデータベースの作成#
createuser
を使用して、コマンドラインから新しい役割を作成できます 指図。 CREATEROLE
を持つスーパーユーザーとロールのみ 特権は新しい役割を作成できます。
次の例では、john
という名前の新しいロールを作成します johndb
という名前のデータベース データベースに対する特権を付与します。
-
新しいPostgreSQLロールを作成する
次のコマンドは、「john」という名前の新しいロールを作成します。
sudo su - postgres -c "createuser john"
-
新しいPostgreSQLデータベースを作成する
createdb
を使用して、「johndb」という名前の新しいデータベースを作成します コマンド:sudo su - postgres -c "createdb johndb"
-
特権を付与する
john
に権限を付与するには 前の手順で作成したデータベースのユーザーは、PostgreSQLシェルに接続します。sudo -u postgres psql
次のクエリを実行します:
GRANT ALL PRIVILEGES ON DATABASE johndb TO john;
PostgreSQLサーバーへのリモートアクセスを有効にする#
デフォルトではPostgreSQLであり、サーバーはローカルインターフェース127.0.0.1
でのみリッスンします。 。 PostgreSQLサーバーへのリモートアクセスを有効にするには、構成ファイルpostgresql.conf
を開きます。 listen_addresses = '*'
を追加します CONNECTIONS AND AUTHENTICATION
セクション。
sudo vim /etc/postgresql/9.6/main/postgresql.conf
/etc/postgresql/9.6/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/9.6/main/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