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

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では、データベースへのログインやデータの編集をする権限をロールとして管理します。 PostgreSQLへのログインやデータの編集をする権限はユーザーごとに管理するのではなく、ロールごとに管理します。ロールにロールを登録することでグループとして管理することもできます。

 ロール作成と設定は以下の手順で行います。

データベース(テーブルなどを含む)
↓
ロールの作成
	ロール名
↓
ロールの設定
	データベース作成許可、ロールの追加許可、PostgreSQLへのログイン、パスワード設定
↓
データベースやテーブルなどにロールを設定

 ロールの管理はスーパーユーザーかロールの追加権限のあるユーザーで行います。
初期状態では「postgres」ユーザーがスーパーユーザーです。
(「postgres」というユーザー名は知られている名称ですので公のサーバーでの使用は好ましくありません。)

ロールの一覧

  psqlにログインし、\duコマンドを実行します。

\duコマンド ロールの一覧
$ psql
...

=# \du

テーブルごとのロール設定

 テーブルごとのロールの設定を確認することができます。\dpコマンドでテーブルを指定します。

テーブルごとのロール設定
=# \dp table_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の自動起動(デーモンプロセス設定)についてを参照してください。

データのエクスポートとインポート

 psqlコマンドプロントで利用する\COPYコマンドを使う方法があります。
 \COPYコマンドによってPostgreSQLデータベースのテーブルレコードの出力と取り込みをすることができます。

詳しくはデータのエクスポートとインポートについてを参照してください。

その他

 PostgreSQL を運用する上での Tips です。

日本語のソート
日本語をソートすると上手くいかない場合があります。多くの場合、LC_COLLATE の設定が英語になっています。その場合のソートの文字列の指定方法などについてです。