PostgreSQLと向き合うための 現場で使えるデータベース操作・SQLノート
MySQLと向き合うための 現場で使えるデータベース操作・SQLノート のPostgreSQL編です。CLIでのPostgreSQLプロンプト操作はMySQLのものと大きく異なりますので、そこら辺を中心に備忘録していきます。
macOSにPostgreSQLをセットアップする
macOSにPostgreSQLをセットアップするまでの手順を以下に示します。
HomebrewでPostgreSQLをインストール
Homebrewを使ってPostgreSQLをインストールします。
brew install postgresql
バージョンの確認:
$ psql --version
psql (PostgreSQL) 14.12 (Homebrew)
PostgreSQLサービスの起動と自動起動の設定
インストール後、PostgreSQLサービスを起動し、自動起動を設定します。
brew services start postgresql
デフォルトのデータベースを作成
まず、/usr/local/varディレクトリを作成し、適切な権限を設定します。
sudo mkdir -p /usr/local/var/postgres
sudo chown -R $(whoami) /usr/local/var/postgres
デフォルトのデータベースを作成します。
initdb /usr/local/var/postgres
psqlコマンドの確認
PostgreSQLのインストールが正常に完了したかを確認するために、psqlコマンドを実行します。
psql postgres
このコマンドでPostgreSQLプロンプトに切り替われば、インストールは成功です。プロンプトを終了するには \q を入力します。
データベースの作成
デフォルトのユーザー名は、macOSのユーザー名と同じになります。以下のコマンドで、新しいデータベースやユーザーを作成することができます。
データベースを作成します。
createdb mydatabase
ユーザーを作成します。
createuser aragi
一旦 \q でプロンプトを終了させてから、psqlを使ってデータベースに接続します。
psql -d mydatabase -U aragi
コマンドの説明
PostgreSQLプロンプト上で、 \? を使ってコマンドの説明を参照してみます。
一般
コマンド | 説明 |
---|---|
\copyright | PostgreSQLの使用と配布条件を表示 |
\crosstabview [COLUMNS] | クエリを実行し、クロス集計結果を表示 |
\errverbose | 最も最近のエラーメッセージを最大の詳細度で表示 |
\g [(OPTIONS)] [FILE] | クエリを実行し(結果をファイルやパイプに送信);引数なしの\gはセミコロンと同じ |
\gdesc | クエリの結果を実行せずに説明 |
\gexec | クエリを実行し、その結果の各値を実行 |
\gset [PREFIX] | クエリを実行し、その結果をpsql変数に保存 |
\gx [(OPTIONS)] [FILE] | \gと同じだが、強制的に拡張出力モード |
\q | psqlを終了 |
\watch [SEC] | 指定秒毎にクエリを実行 |
ヘルプ
コマンド | 説明 |
---|---|
\? [commands] | バックスラッシュコマンドのヘルプを表示 |
\? options | psqlコマンドラインオプションのヘルプを表示 |
\? variables | 特殊変数のヘルプを表示 |
\h [NAME] | SQLコマンドの構文のヘルプを表示、* ですべてのコマンド |
Query Buffer
コマンド | 説明 |
---|---|
\e [FILE] [LINE] | 外部エディタでクエリバッファ(またはファイル)を編集 |
\ef [FUNCNAME [LINE]] | 外部エディタで関数定義を編集 |
\ev [VIEWNAME [LINE]] | 外部エディタでビュー定義を編集 |
\p | クエリバッファの内容を表示 |
\r | クエリバッファをリセット(クリア) |
\s [FILE] | 履歴を表示またはファイルに保存 |
\w FILE | クエリバッファをファイルに書き出し |
Input/Output
コマンド | 説明 |
---|---|
\copy ... | SQL COPYを使ってデータをクライアントホストにストリーム |
\echo [-n] [STRING] | 文字列を標準出力に書き出し(-nで改行なし) |
\i FILE | ファイルからコマンドを実行 |
\ir FILE | \iと同じだが、現在のスクリプトの場所に相対的 |
\o [FILE] | すべてのクエリ結果をファイルやパイプに送信 |
\qecho [-n] [STRING] | 文字列を\o出力ストリームに書き出し(-nで改行なし) |
\warn [-n] [STRING] | 文字列を標準エラー出力に書き出し(-nで改行なし) |
Conditional
コマンド | 説明 |
---|---|
\if EXPR | 条件付きブロックを開始 |
\elif EXPR | 現在の条件付きブロック内の代替 |
\else | 現在の条件付きブロック内の最終代替 |
\endif | 条件付きブロックを終了 |
Informational
コマンド | 説明 |
---|---|
\d[S+] | テーブル、ビュー、シーケンスを一覧表示 |
\d[S+] NAME | テーブル、ビュー、シーケンス、インデックスを説明 |
\da[S] [PATTERN] | 集約関数を一覧表示 |
\dA[+] [PATTERN] | アクセスメソッドを一覧表示 |
\dAc[+] [AMPTRN [TYPEPTRN]] | オペレータクラスを一覧表示 |
\dAf[+] [AMPTRN [TYPEPTRN]] | オペレータファミリを一覧表示 |
\dAo[+] [AMPTRN [OPFPTRN]] | オペレータファミリのオペレータを一覧表示 |
\dAp[+] [AMPTRN [OPFPTRN]] | オペレータファミリのサポート関数を一覧表示 |
\db[+] [PATTERN] | テーブルスペースを一覧表示 |
\dc[S+] [PATTERN] | 変換を一覧表示 |
\dC[+] [PATTERN] | キャストを一覧表示 |
\dd[S] [PATTERN] | 他の場所に表示されないオブジェクトの説明を表示 |
\dD[S+] [PATTERN] | ドメインを一覧表示 |
\ddp [PATTERN] | デフォルトの権限を一覧表示 |
\dE[S+] [PATTERN] | 外部テーブルを一覧表示 |
\des[+] [PATTERN] | 外部サーバを一覧表示 |
\det[+] [PATTERN] | 外部テーブルを一覧表示 |
\deu[+] [PATTERN] | ユーザーマッピングを一覧表示 |
\dew[+] [PATTERN] | 外部データラッパーを一覧表示 |
\df[anptw][S+] [FUNCPTRN [TYPEPTRN ...]] | [集約/通常/プロシージャ/トリガ/ウィンドウ]関数を一覧表示 |
\dF[+] [PATTERN] | テキスト検索構成を一覧表示 |
\dFd[+] [PATTERN] | テキスト検索辞書を一覧表示 |
\dFp[+] [PATTERN] | テキスト検索パーサーを一覧表示 |
\dFt[+] [PATTERN] | テキスト検索テンプレートを一覧表示 |
\dg[S+] [PATTERN] | ロールを一覧表示 |
\di[S+] [PATTERN] | インデックスを一覧表示 |
\dl | 大規模オブジェクトを一覧表示、\lo_listと同じ |
\dL[S+] [PATTERN] | 手続き型言語を一覧表示 |
\dm[S+] [PATTERN] | マテリアライズドビューを一覧表示 |
\dn[S+] [PATTERN] | スキーマを一覧表示 |
\do[S+] [OPPTRN [TYPEPTRN [TYPEPTRN]]] | オペレータを一覧表示 |
\dO[S+] [PATTERN] | コレーションを一覧表示 |
\dp [PATTERN] | テーブル、ビュー、シーケンスのアクセス権限を一覧表示 |
\dP[itn+] [PATTERN] | [インデックス/テーブル] パーティショニングを一覧表示 [n=ネスト] |
\drds [ROLEPTRN [DBPTRN]] | データベース毎のロール設定を一覧表示 |
\dRp[+] [PATTERN] | レプリケーション公開を一覧表示 |
\dRs[+] [PATTERN] | レプリケーション購読を一覧表示 |
\ds[S+] [PATTERN] | シーケンスを一覧表示 |
\dt[S+] [PATTERN] | テーブルを一覧表示 |
\dT[S+] [PATTERN] | データ型を一覧表示 |
\du[S+] [PATTERN] | ロールを一覧表示 |
\dv[S+] [PATTERN] | ビューを一覧表示 |
\dx[+] [PATTERN] | 拡張機能を一覧表示 |
\dX [PATTERN] | 拡張統計を一覧表示 |
\dy[+] [PATTERN] | イベントトリガーを一覧表示 |
\l[+] [PATTERN] | データベースを一覧表示 |
\sf[+] FUNCNAME | 関数の定義を表示 |
\sv[+] VIEWNAME | ビューの定義を表示 |
\z [PATTERN] | \dpと同じ |
Formatting
コマンド | 説明 |
---|---|
\a | 整列されていない出力モードと整列された出力モードを切り替え |
\C [STRING] | テーブルタイトルを設定、なしの場合は解除 |
\f [STRING] | 整列されていないクエリ出力のフィールドセパレータを表示または設定 |
\H | HTML出力モードを切り替え(現在オフ) |
\pset [NAME [VALUE]] | テーブル出力オプ |
ページャを無効化
psqlのプロンプトで検索結果をlessで表示している際に、一気に最後まで表示するには、以下のコマンドを使用します。\pset pager off
これでページャが無効化され、一気に全ての結果が表示されるようになります。
SQLファイルをデータベースに流し込む
以下のコマンドを使用して、PostgreSQLデータベースにSQLファイルを流し込むことができます。
psql -U ユーザー名 -d データベース名 -f ファイルパス.sql
特定のテーブルのカラム構成を確認したい
以下のSQLクエリを使用して、特定のテーブルのカラム構成を確認できます。
SELECT column_name, data_type, character_maximum_length
FROM information_schema.columns
WHERE table_name = 'テーブル名';
ネットワーク越しのpostgresqlに接続する
macOSからLAN内のRocky Linuxで動作しているPostgreSQLに接続する方法です。
PostgreSQLの設定ファイル(通常は/var/lib/pgsql/バージョン/data/postgresql.conf)を開き、外部からの接続を許可するように設定を変更します。
listen_addresses = '*'
host all all 192.168.1.0/24 md5
ここで192.168.1.0/24は許可するIPアドレスの範囲です。私のAndroidテザリング下のLANの場合、192.168..の範囲で変わるのでを許可するには、以下のように設定しました。
host all all 192.168.0.0/16 md5
ここで、192.168.0.0/16は192.168..全体をカバーするCIDR表記です。この設定により、192.168.0.0から192.168.255.255までの範囲のIPアドレスからの接続が許可されます。
以上の設定を反映するために、PostgreSQLサービスを再起動します。
sudo systemctl restart postgresql
ファイアーウォールを使っている場合は、適宜ポートを解放してください。 これでmacOS上のpsqlクライアントコマンドや、DataGrip.appなどから直接外部DBへ接続可能になりました。