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

PostgreSQL リファレンス

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

PostgreSQL のインストール

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

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

PostgreSQLのインストール

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

$ sudo apt install postgresql

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

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

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

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

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

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

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

 起動しているかを確認するには 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になっていればログインが可能になります。

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

$ sudo systemctl start postgresql

 サーバーの起動、再起動に関しては起動設定を参照してください。

PostgreSQLの操作( psql )

 psql は端末から利用できる PostgreSQL 用のインターフェイスです。

 OS の端末から psql コマンドでPostgreSQLのコマンドラインインターフェイスにログインします。

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

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

 詳しくはpsqlを参照して下さい。

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

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

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

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

 PostgreSQLでは、ユーザーはロールとして管理します。データベースへのログインやデータの編集をする権限をロールで管理します。 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 の設定が英語になっています。その場合のソートの文字列の指定方法などについてです。