はじめに
この記事では、PostgreSQLの操作時に便利なコマンドやクエリをまとめたPostgreSQLチートシートを紹介します。頻繁に使用されるコマンドやクエリを簡単に参照できます。
ターミナルで使用するコマンド
このセクションでは、PostgreSQLデータベースを操作するためのターミナル(またはコマンドラインインタフェース)でよく使用されるコマンドについて詳しく説明します。
サーバーの起動
PostgreSQLサーバーを起動するには、pg_ctl start
コマンドを使用し、データが格納されているディレクトリを指定するために-D
オプションを使用します。
$ pg_ctl start -D /usr/local/var/postgres
サーバーの停止
PostgreSQLサーバーを停止するには、pg_ctl stop
コマンドを使用し、停止するデータのディレクトリを指定するために再度-D
オプションを使用します
$ pg_ctl stop -D /usr/local/var/postgres
サーバーの実行状態の確認
PostgreSQLサーバーが実行中かどうかを確認するには、ps aux | grep postgres
コマンドを使用します。このコマンドはPostgreSQLに関連する全ての現在のプロセスをリストアップします。
$ ps aux | grep postgres
データベースの接続
PostgreSQLデータベースに接続するには、psql
コマンドを使用し、-d
(データベース名)、-U
(ユーザー名)、-h
(ホスト名)のオプションを指定します。これらのオプションが指定されていない場合、デフォルトでログインユーザーとlocalhost
が使用されます。
$ psql -d database -U user -h host
データベースのリスト表示
データベースのリストを表示するには、psql -l
コマンドを使用します。
$ psql -l
PostgreSQLのバージョンの表示
現在使用しているPostgreSQLのバージョンを確認するには、psql -V
コマンドを実行します。
$ psql -V
PostgreSQLコマンド
次に、PostgreSQLのコマンドラインインタフェースでよく使用されるコマンドに焦点を当てます。
切断
PostgreSQLインタフェースから切断する場合は、\q
または\!
コマンドを使用します。
postgres=# \q
postgres=# \!
ユーザー
ユーザー管理はデータベース管理の重要な部分です。ここでは、ユーザー操作に関連するコマンドを見ていきます。
PostgreSQLでは、ロールという概念を使用してデータベースへのアクセス権限を管理しています。PostgreSQLでユーザーのリストを表示するには、次のコマンドを使用します。
postgres=# \du
データベースへのアクセス権限の管理には、ロールの概念が使用されています。全てのロールをリストするには、次のクエリを使用します。
postgres=# SELECT rolname FROM pg_roles;
データベース
データベースの操作は、PostgreSQLでの日常的なタスクです。ここでは、これらの操作に関連するコマンドを見ていきます。
接続されているデータベースの情報を表示するには、\conninfo
コマンドを使用します。
postgres=# \conninfo
全てのデータベースをリストするには、\l
コマンドを使用します。
postgres=# \l
異なるデータベースに接続するには、\c <database_name>
コマンドを使用します。
postgres=# \c <database_name>
現在接続しているデータベースを表示するには、SELECT current_database();
コマンドを使用します。
postgres=# SELECT current_database();
新しいデータベースを作成するには、CREATE DATABASE <database_name>;
コマンドを使用します。
postgres=# CREATE DATABASE <database_name>;
テーブル
テーブル関連の操作は、PostgreSQLデータベースの中核をなすものです。
テーブルの説明(列名とデータ型を含む)を取得するには、\d <table>
コマンドを使用します。
postgres=# \d <table>
テーブルの詳細な説明(ストレージ統計や列のコメントなどの追加情報を含む)を取得するには、\d+ <table>
コマンドを使用します。
postgres=# \d+ <table>
現在のスキーマから全てのテーブルをリストするには、\dt
コマンドを使用します。
postgres=# \dt
全てのスキーマのテーブルをリストするには、\dt *.*
コマンドを使用します。
postgres=# \dt *.*
特定のスキーマのテーブルをリストするには、\dt <schema>.*
コマンドを使用します。
postgres=# \dt <schema>.*
全てのテーブルのアクセス権限をリストするには、\dp
コマンドを使用します。
postgres=# \dp
スキーマ
スキーマは名前空間であり、他のスキーマに存在する他のオブジェクト(テーブル、データ型、関数、演算子)と重複する可能性のある名前のオブジェクトが含まれています。PostgreSQLはスキーマを使用して、複数のユーザーが互いに干渉せずに1つのデータベースを共有するのに役立ちます。
現在のデータベース内の全てのスキーマをリストするには、\dn
コマンドを使用します。
postgres=# \dn
ビュー
ビューは仮想テーブルと考えることができます。つまり、クエリの出力をテーブルとして扱うことができる保存されたクエリです。したがって、ビューは1つ以上の既存のベーステーブルから派生したオブジェクトです。
現在のデータベース内の全てのビューをリストするには、\dv
コマンドを使用します。
postgres=# \dv
CSVのインポート/エクスポート
PostgreSQLは、CSVなどのさまざまな形式でデータをインポートおよびエクスポートするための強力なメカニズムを提供しています。
テーブルをCSVファイルにエクスポートするには、\copy
コマンドを使用します。以下にいくつかの例を示します。
postgres=# \copy table TO '<path>' CSV
postgres=# \copy table(col1,col1) TO '<path>' CSV
postgres=# \copy (SELECT...) TO '<path>' CSV
CSVファイルからテーブルにデータをインポートするには、\copy
コマンドを使用します。以下にいくつかの例を示します。
postgres=# \copy table FROM '<path>' CSV
postgres=# \copy table(col1,col1) FROM '<path>' CSV
履歴
以前に実行したコマンドの履歴を追跡することは、タスクの繰り返しやセッションで行われた操作の理解に非常に役立ちます。PostgreSQLでは、コマンドライン履歴を表示するために\s
コマンドを使用することができます。
postgres=# \s
\s
の後にファイル名を指定すると、コマンド履歴がそのファイルに書き込まれます。