備忘録的プログラミングリファレンス

PostgreSQL のインストール

 Ubuntu における PostgreSQL のインストールからユーザーの設定、ログインについて解説します。

 PostgreSQL のインストールには、サーバーを構築する場合開発環境を構築する場合があります。 開発環境をインストールする場合は、以下の開発用パッケージのインストールから参照してください。

PostgreSQL サーバーのインストール

 PostgreSQL をサーバーとして運用する場合のインストールの方法です。サーバーとしての運用が目的なら、こちらのインストールを選びます。

 もしも、PostgreSQL データベースを使った API などの開発用のインストールは「開発用パッケージのインストール」を参照してください。 サーバーの運用が目的なら、開発用パッケージはインストールしないで下さい。サーバーの改編が出来てしまいます。

インストール

 管理者権限の apt コマンドによってインストールします。

$ sudo apt install postgresql

 インストールができたらバージョンを確認してみましょう。

psql -V
...

 psql は PostgrSQL のコマンドです。

 上記以外に PostgreSQL サイトからインストールする方法もありますが、Ubuntu 版といったディストリビューションとはディレクトリ構成などに違いがあります。
 ディストリビューションで用意されたパッケージを利用したほうが親和性が高いです。特に開発に利用する場合は、参考にするサイトや資料の内容がソースからのインストールなにか、特定のディストリビューションのパッケージからのインストールなのかによって違いがあるので注意が必要です。

起動設定

 パッケージインストールによる PostgreSQL はインストールするだけでサーバーとして自動で起動するようになっています。

 起動しているかを確認するには systemctl コマンドのオプション status を使用します。

$ systemctl status postgresql
 postgresql.service - PostgreSQL RDBMS
	   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor pr>
	   Active: active (exited) since Wed 2023-09-13 07:44:13 JST; 13min ago
	  Process: 1413 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
	 Main PID: 1413 (code=exited, status=0/SUCCESS)
	      CPU: 1ms

 9月 13 07:44:13 user-PC systemd[1]: Starting PostgreSQL RDBMS...
 9月 13 07:44:13 user-PC systemd[1]: Finished PostgreSQL RDBMS.

 上記のように、PostgreSQL サーバーがactiveになっていればログインが可能になります。

 MySQL を起動するためには systemctl コマンドのオプション start を使用します。

$ sudo systemctl start postgresql

 再起動は restart を使用します。

$ sudo systemctl restart postgresql

古い MySQL の起動と停止

 以下は古い方法によるものだと思います。場合によってはこの方法では起動できないかもしれません。

起動
$ /etc/init.d/postgresql start
再起動
$ /etc/init.d/postgresql restart
停止
$ /etc/init.d/postgresql stop

初期状態でのpostgresユーザーによるログイン

 インストールのみでもデータベースが自動で起動するようになっています。

 PostgreSQL はインストールのみの場合、標準でpostgresが PostgreSQL の管理ユーザ(スーパーユーザー)となっています。
 PostgreSQL をサーバーとして公開するならば、スーパーユーザーをpostgresにしない方がよいでしょう。サーバーの構築段階でスーパーユーザー名は決めておくことをお勧めします。
 ここでは標準状態でのインストールを解説しますので、スーパーユーザーはpostgresで解説します。

ユーザーの確認

 postgresユーザを OS 上にあるかを確認するには以下のようにします。

$ cat /etc/passwd | grep postgres

 postgresユーザーが存在していれば以下のように表示されます。

postgres:x:122:127:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash

パスワードの登録

 インストールしただけの状態では、OS上のpostgresユーザにパスワードがないためにログインする際に困るときがあります。以下のようにパスワードを登録します。

$ sudo passwd postgres
[sudo] **** のパスワード:
新しい UNIX パスワードを入力してください:	<決定したパスワード>
新しい UNIX パスワードを再入力してください: <決定したパスワード>
passwd: パスワードは正しく更新されました

postgres ユーザーでログイン

 OS 上の端末でpostgresユーザーに切り替えてみましょう。

$ su - postgres
パスワード: <決定したパスワード>

 次に psql コマンドで PostgreSQL のコマンドラインインターフェイスにログインしてみます。

psql でログイン
$ psql
psql (10.12 (Ubuntu 10.12-0ubuntu0.18.04.1))
Type "help" for help.

postgres=#

 psql コマンドでデータベースを指定しない場合はユーザー名と同じデータベース名に接続されます。 このデータベースはインストール時に自動で作成されたデータベースです。

開発用パッケージのインストール

 PostgreSQL 用の API などの開発には、開発用パッケージとライブラリをインストールする必要があります。

 PostgreSQL をサーバーとして運用することが目的なら開発用パッケージはインストールしないで下さい。サーバーの改編が出来てしまいます。運用が目的なら、上記のサーバーのインストールを参照してください。

 開発用のインストールには Ubuntu や CentOS などのディストリビューションからインストールする方法と、PostgreSQL のサイトからパッケージをダウンロードしインストールする方法があります。
 開発環境をディストリビューションを利用して構築するのなら、PostgreSQL もディストリビューションを利用してインストールすることをお勧めします。
 インストール元がディストリビューションからなのか、PostgreSQL のサイトからなのかの大きな違いは環境設定とディレクトリ構成です。 環境設定やディレクトリ構成の違いによって動作に不具合が出ることがあります。また、参考にしたサイトや資料によっては環境設定やディレクトリ構成に違いがあり、読み替える必要があります。

 開発用にPostgreSQLをインストールするには、postgresql-server-dev-all, libpq-devパッケージも必要です。

 例えばPostgreSQL 10をインストールするためには以下のようにします。

$ sudo apt install postgresql-10 postgresql-server-dev-10 libpq-dev

 開発において、主にpostgres.hとlibpq-fe.hを呼び出します。ubuntu1. 3以降はそれらファイルは別々のディレクトリにあるので注意が必要です。

環境変数の変更方法

 ディストリビューションを利用してインストールしていない場合で環境変数の設定の必要があれば以下のように、.bashrc ファイルに追記します。以下は ver9.3 の場合です。

$ sudo su postgres
$ vim ~/.bashrc
PATH="$PATH":/usr/lib/postgresql/9.3/bin
export POSTGRES_HOME=/usr/lib/postgresql/9.3
export PGDATA=/var/lib/postgresql/9.3/main
export POSTGRES_LIB=$POSTGRES_HOME/lib
export POSTGRES_INCLUDE=/usr/include/postgresql
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$POSTGRES_LIB"

データベース作成とユーザー管理

 以降はデータベースの作成やユーザーの管理をすることと思います。

 PostgrSQL では、データベースをまたいだデータ検索といった操作はできません。

 データベースごとにスキマー、その中にテーブルを作成します。スキーマはデータベースの中の用途ごとのカタマリで、例えば会計、在庫管理、給与管理などをスキーマーごとに作ることもできます。 その場合は、スキーマーをまたいだ検索といった操作ができます。
 ただしスキーマーには、メンテナンスが煩雑になり構成が分かり難くなるという欠点はあります。

 データベースの作成などの管理ついては「データベースの管理(確認、作成、削除)」を参照して下さい。

 ユーザーの追加、管理については「PostgreSQLユーザー(ロール)管理」を参照して下さい。