環境構築:Debian 10(buster) にPostgreSQL 11をインストールし、新規DBを作成する方法

前書き

PostgreSQLは、オープンソースのオブジェクト関係リレーショナルデータベース関係システム(ORDBMS)です。2020年時点のシェアランキングは、4位です。やや人気のないDBと言えるでしょう。

シェア1位のOracle DatabaseおよびMicrosoft SQL Serverは、有償です(Microsoft SQL Severは無償版も存在)。そのため、PostgreSQLは同じくオープンソースであるMySQL(シェア2位)と比較される機会が多いです。PostgreSQLは高機能・堅牢な設計、MySQLは速度に重きを置いた設計であり、用途に応じて使い分けられるようです。

最近、私は仕事でPostgreSQLを使用し始めたので、本記事ではDebian 10(buster)にPostgreSQLをインストールし、DBを作成する方法を紹介します。

本記事で紹介する内容
  • PostgreSQLのインストール
  • PostgreSQL環境設定ファイルの置き場(PATH)
  • PostgreSQL DB情報の置き場(PATH)
  • 外部ホストからの接続禁止設定
  • postgresユーザのパスワード設定
  • DB操作用ユーザを追加
  • postgresユーザ以外がpostgresユーザとしてDBに接続する方法
  • 新規DB作成

                                       

検証環境

                                                                                        

PostgreSQLのインストール

PostgreSQLのインストールには、二通りの方法があります。

  1. PostgreSQL公式サイトからパッケージを取得
  2. Debian公式リポジトリからパッケージを取得

どちらの方法も、aptパッケージマネージャを使用します。最新版のPostgreSQLを使用したい方は、上記1.の手順を実行し、より簡単な方法を選ぶ場合は上記2.の手順を実行してください。どちらか一方の手順だけ実行すればよいです。

本記事の検証では、Debian公式リポジトリのパッケージを利用しました。

PostgreSQL公式サイトからパッケージを取得する場合(公式手順のリンク

まず、PostgreSQL公式リポジトリからパッケージを取得できるよう、aptパッケージマネージャの設定ファイルを編集(追加)します。管理者権限で、/etc/apt/sources.list.d/pgdg.listを作成します。

次に、PostgreSQL公式サイトの認証鍵を取得し、パッケージ情報をアップデートします。

最後に、PostgreSQLをインストールします。

                    

Debian公式サイトからパッケージを取得する場合

特に準備は、不要です。aptパッケージマネージャからPostgreSQLを取得します。

Debian公式レポジトリには、PostgreSQLに関するサードパーティのアドオンを含むパッケージが存在します。その一例を下表に示します。

パッケージ名 パッケージ内容の説明
postgresql-client-11 クライアントライブラリおよびクライアントバイナリ
postgresql-11 データベースサーバーのコア機能
postgresql-contrib-9.x

追加機能提供モジュール(Ver. 10以降のpostgresql-xxパッケージの一部)

libpq-dev フロントエンド開発向けのC言語ライブラリ(ヘッダ含む)
postgresql-server-dev-11 バックエンド開発向けのC言語ライブラリ(ヘッダ含む)
pgadmin4 pgAdmin4(GUIによる管理ツール)のユーティリティ

                                                                         

PostgreSQL環境設定ファイルの置き場(PATH)

PostgreSQL設定ファイルの置き場は、LinuxディストリビューションやWindows環境で異なります。Debian環境では、/etc/postgresql/11/main環境設定ファイルが存在します。

                 

PostgreSQL DB情報の置き場(PATH)

PostgreSQLで作成したDB情報は、/var/lib/postgresql/11/mainに存在します。手動でDBを停止させる場合などに、前述のPATHを把握しておく必要があるため、記載しておきます。

                      

外部ホストからの接続禁止設定

セキュリティ対策のため、外部ホストからPostgreSQL(DB)にアクセスできないように設定します。/etc/postgresql/11/main/postgresql.confを編集し、以下の状態に変更します。

                

postgresユーザのパスワード設定

PostgreSQLをaptコマンドでインストール後、postgresユーザが自動で追加されます。このpostgresユーザに対して、「OS向けパスワード設定」および「DB向けパスワード設定」を行います。

                       

DB操作用ユーザを追加

postgresユーザでDBを操作する事もできますが、OS管理ユーザ(普段使用しているユーザ)でDBを操作したい場合もあります。そのため、OS管理ユーザと同名ユーザをDBに対して追加します。

postgresユーザでDB用ユーザを作成しなかった場合、管理者権限を付与できません。

                  

postgresユーザ以外がpostgresユーザとしてDBに接続する方法

PostgreSQLでは、postgresユーザ以外がpostgresユーザとしてDBに接続できます(例:naoユーザで、’psql -U postgres’をTerminalで入力)。しかし、Peer認証として「 DB 所有者がShellを実行している OS 管理ユーザ名と一致するか」をチェックされます。その結果、

psql: FATAL: ユーザ “postgres” で対向(peer)認証に失敗しました

psql: FATAL: password authentication failed for user “postgres”

といったエラーメッセージが表示されます。

PEER認証によるエラーの回避策は、/etc/postgresql/11/main/pg_hba.confを編集し、認証時にMD5を用いる設定に変更する事です。MD5暗号化(ハッシュ化)は、postgresユーザのパスワード変更時にencrypted オプションをつける事で実施済みです。そのため、pg_hba.confを以下のように編集し、PostgreSQLを再起動すればMD認証が使用できます。

                                                   

新規DB作成

新規DB作成のため、psqlコマンドでPostgreSQLに接続し、CREATE文を実行します。

DBが作成されているかの確認は、psql -lで確認できます。

                                                                   

おすすめ