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

PostgreSQL

 PostgreSQLは、リレーショナル(関係)データベース管理システム (RDBMS:relational database management system) です。SQLを使用してデータベースおよびテーブルなどを作成しデータを記録します。単独でデータベースとしても利用できます。デーモン機能を使ってデータベースサーバーとすることもできます。

PostgreSQLのインストール

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

 インストールにはUbuntuやCentOSなどのディストリビューションからインストールする方法と、PostgreSQLのサイトからパッケージをダウンロードしインストールする方法があります。
 開発環境をディストリビューションを利用して構築するのなら、PostgreSQLもディストリビューションを利用してインストールすることをお勧めします。

PostgreSQLのインストール

 管理者権限で、aptによってインストールします。

$ sudo apt install postgresql

 postgreSQLのインストールはここまでですが、公のサーバーとして利用するなら、スーパーユーザーの設定、アクセスログの記録などのセキュリティー設定や記録ディレクトリの設定などが必要になります。

 初期のスーパーユーザーは「postgres」になっています。さらにパスワードを設定しなければなりません。詳しくは以下の「初期状態での「postgres」ユーザーによるログイン」を参照して下さい。

PostgreSQLの開発環境のインストール

 もし開発環境を構築する必要がある場合には、上記の方法では開発用パッケージは含まれていません。PostgreSQLを使って開発を行うにはpostgresql-server-dev-all, libpq-devパッケージもインストールする必要があります。

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

詳しくはPostgreSQLのインストールについてを参照してください。

PostgreSQLの起動と停止

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

PostgreSQLの操作(postmasterとpsql)

 PostgreSQLの特徴的なのはpostmasterとpsqlです。
 PostgreSQLデータベースの入出力はpostmasterが担います。postmasterがフォアグランド、バックグランドで稼働して、PostgreSQLへの入出力を行います。
 PostgreSQLのインターフェイスとしてpsqlコマンドを使用します。

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

 psqlコマンドでデータベースを指定しない場合はユーザー名と同じデータベース名に接続します。

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

 詳しくは「PostgreSQLの操作(postmasterとpsql)」を参照して下さい。

 初期状態では「postgres」でPostgreSQLのコマンドラインインターフェイスにログインしてみると思います。 しかし、初期状態では「postgres」ユーザーのUbuntuにおけるパスワードも設定されていません。
 詳しくは「初期状態での「postgres」ユーザーによるログイン」を参照して下さい。

 PostgreSQLからログアウトする場合は以下のコマンドです。

psqlからのログアウト
=# \q

ユーザー(ロール)の管理

 PostgreSQLのようなSQLデータベースはユーザーをロールとして管理します。 psqlコマンドでPostgreSQLにログインをしてロールの確認や追加、削除を行います。

 スーパーユーザーを設定していない初期状態では「postgres」ユーザーで操作します。
(「postgres」というユーザー名は知られている名称ですので公のサーバーでの使用は好ましくありません。スーパーユーザーを変更する方法を参照してください。)

PostgreSQLユーザー(ロール)の一覧
$ psql
...

=# \du
SQLコマンドによるロール追加
$ psql
...
=# CREATE ROLE new_name;

 データベースを作成したりロールを追加できるユーザーをスーパーユーザーと分けた方がよいかもしれません。
 以下はログインを可能したり、データベース作成やロールの追加権限を付与します。

ログイン可能に変更
=# ALTER ROLE new_name WITH LOGIN;
データベース作成、ロールの追加権限を付与
=# ALTER ROLE new_name WITH CREATEROLE CREATEDB;
パスワードの追加、変更
ALTER ROLE new_name WITH PASSWORD 'password';
SQLコマンドによるロール削除
=# DROP ROLE new_name;

詳しくは「PostgreSQLユーザー(ロール)管理」を参照してください。

 外部からPostgreSQLのデータ操作をするには、PostgreSQLへのログイン認証、ロールの設定、テーブルごとのロール設定をする必要があるかもしれません。
 ログイン認証、ロールの設定、テーブルごとの設定については「ログイン認証とロールの設定」を参照して下さい。

データベースの管理(確認、作成、削除)

 データベースの管理としては、既存データベースの一覧で確認、データベースの作成、削除、オーナー管理、ディレクトリ管理があります。ここでは簡単に説明します。

 詳しくは、データベースの管理(一覧、作成、削除)を参照して下さい。

データベースの一覧確認

$ psql -l

データベースの作成

 まず最初にデータを統括するためのデータベースを作成しなければなりません。データベースにデータを収めるためのテーブルやビュー、トリガといったスクリプトなどが入ります。

# CREATE DATABASE new_database OWNER owner_name;

 ログイン可能なユーザーを追加し、そのユーザーでpsqlコマンドを実行するとデータベースがないというエラーが返ってくることがあります。 そのような場合は、ユーザー名のデータベースを作ります。

# CREATE DATABASE user_name OWNER user_name;

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

SQLファイルの読み込み

 SQLファイルを、PostgreSQLのコマンドラインインターフェイスから読み込み、実行することができます。

database=> \i DataBase/sql_file.sql

 読み込むsqlファイルはカレントディレクトリからファイル名で辿ります。読み込み先のデータベース名は確認するようにします。

 詳しくは「SQLファイルの読み込みと実行」を参照してください。

PostgreSQLの自動起動(デーモンプロセス設定)

 UbuntuのパッケージからPostgreSQLをインストールしたら、標準ではコンピュータの起動時にPostgreSQLも起動します。
 もし、コンピュータを起動することに併せてPostgreSQLが起動しない場合は、自動で起動するようにデーモンプロセスを設定しておかなければなりません。

詳しくはPostgreSQLの自動起動(デーモンプロセス設定)についてを参照してください。