PostgreSQLクエリを自動化:スクリプトファイルとメタコマンド

2024-04-02

コマンドラインからPostgreSQLクエリを実行する方法

コマンドラインツール

PostgreSQLには、コマンドラインから操作するための公式ツール psql があります。

インストール

psql は、PostgreSQLと共にインストールされます。多くのLinuxディストリビューションでは、パッケージマネージャーを使ってインストールできます。

# Debian/Ubuntu
apt install postgresql-client

# CentOS/Red Hat
yum install postgresql-devel

# macOS
brew install postgresql

基本的な使い方

psql コマンドは、以下のように実行します。

psql [オプション] [データベース名]

オプションには、以下のようなものがあります。

  • -h: ホスト名
  • -p: ポート番号
  • -U: ユーザー名
  • -W: パスワード
  • -c: 実行するSQLクエリ

例えば、以下のコマンドは、postgres ユーザーで mydb データベースに接続し、SELECT * FROM users クエリを実行します。

psql -U postgres mydb -c "SELECT * FROM users"

クエリの実行

psql に接続すると、対話的なシェルが起動します。ここで、SQLクエリを入力して実行できます。

psql mydb

# ユーザー情報を表示
SELECT * FROM users;

# 新しいユーザーを追加
INSERT INTO users (name, email) VALUES ('John Doe', '[email protected]');

# データベースから切断
\q

スクリプトファイル

複数のクエリをまとめて実行したい場合は、SQLスクリプトファイルを作成できます。スクリプトファイルは、拡張子が .sql のテキストファイルです。

例えば、users.sql という名前のスクリプトファイルに以下の内容を記述します。

-- ユーザー情報を表示
SELECT * FROM users;

-- 新しいユーザーを追加
INSERT INTO users (name, email) VALUES ('John Doe', '[email protected]');

このスクリプトは、以下のコマンドで実行できます。

psql mydb -f users.sql

その他のツール

psql 以外にも、コマンドラインからPostgreSQLを操作するためのツールがあります。

  • pgcli: より使いやすいインターフェースを提供するツール
  • sqlcmd: Windowsユーザー向けのツール

これらのツールは、psql と同じように使用できます。

コマンドラインからPostgreSQLクエリを実行する方法を学習することで、データベース操作をより効率的に行うことができます。




接続とクエリ実行

# postgresql ユーザーで mydb データベースに接続
psql mydb

# ユーザー情報を表示
SELECT * FROM users;

# 新しいユーザーを追加
INSERT INTO users (name, email) VALUES ('John Doe', '[email protected]');

# データベースから切断
\q

スクリプトファイル

-- ユーザー情報を表示
SELECT * FROM users;

-- 新しいユーザーを追加
INSERT INTO users (name, email) VALUES ('John Doe', '[email protected]');
psql mydb -f users.sql

パラメータ付きクエリ

-- ユーザー名で検索
SELECT * FROM users WHERE name = $1;

実行:

psql mydb -c "SELECT * FROM users WHERE name = 'John Doe'"

環境変数

# 環境変数に接続情報を設定
export PGHOST=localhost
export PGPORT=5432
export PGDATABASE=mydb
export PGUSER=postgres
export PGPASSWORD=password

# クエリ実行
psql -c "SELECT * FROM users"



コマンドラインから PostgreSQL クエリを実行するその他の方法

psql には、データベース操作を補助するメタコマンドと呼ばれる特殊なコマンドがあります。

  • \d: テーブルやデータベースなどの情報を表示
  • \copy: データをファイルにコピー
  • \set: 環境変数を設定

例:

# テーブル一覧を表示
\d

# users テーブルのデータを CSV ファイルにコピー
\copy users TO 'users.csv' WITH CSV

# 検索パスを設定
\set search_path = public, my_schema

シェルスクリプトを使って、複数のクエリをまとめて実行したり、条件分岐やループ処理などを組み込むことができます。

#!/bin/bash

# データベースに接続
psql mydb

# ユーザー情報を表示
SELECT * FROM users;

# 新しいユーザーを追加
if [[ "$1" ]]; then
  INSERT INTO users (name) VALUES ('$1');
fi

# データベースから切断
\q

その他のツール

  • dbeaver: 複数のデータベースに対応したGUIツール

Python や Ruby などの言語

psycopg2 や pg gem などのライブラリを使って、PostgreSQL に接続し、クエリを実行することができます。

例 (Python):

import psycopg2

# データベースに接続
conn = psycopg2.connect(dbname="mydb", user="postgres", password="password")

# クエリを実行
cur = conn.cursor()
cur.execute("SELECT * FROM users")
rows = cur.fetchall()

# データベースを閉じる
conn.close()

Webブラウザ

pgAdmin や Adminer などのツールを使って、Webブラウザからデータベースを操作できます。


database postgresql


列挙型 vs チェック制約 vs サブクエリ vs カスタムドメイン: PostgreSQLでデータを制限する最適な方法

データ整合性の向上: 列挙型は、列に格納できる値を制限することで、データの整合性を向上させます。 これにより、無効なデータがデータベースに挿入されるのを防ぎ、アプリケーションのエラーを削減できます。コードの可読性の向上: 列挙型を使用すると、列に格納される値をより明確に表現できます。 これにより、コードが読みやすくなり、メンテナンスしやすくなります。...


大規模テーブルのCOUNT処理を高速化!SQLiteのパフォーマンス向上テクニック

本記事では、SQLite における COUNT 処理の遅延問題について、その原因と解決策を分かりやすく解説します。SQLite における COUNT 処理の遅延は、主に以下の2つの要因によって引き起こされます。1 テーブルスキャンの必要性COUNT 処理を実行する場合、SQLite はテーブル内のすべての行をスキャンし、一致するレコード数をカウントする必要があります。大規模なテーブルでは、このスキャン処理に時間がかかり、処理速度が著しく低下します。...


PostgreSQLで文字列検索を行うための完全ガイド:LIKE演算子、正規表現、全文検索、トリグラム検索、外部ライブラリまで徹底解説

LIKE演算子を使用するLIKE演算子は、指定されたパターンと文字列が一致するかどうかを判断します。パターンには、ワイルドカード文字を使用できます。例:ワイルドカード文字:%: 任意の文字列にマッチ[]: 角括弧内の文字のいずれかにマッチ正規表現を使用する...


PostgreSQLとSQLAlchemyを駆使して配列検索をマスター:高度なテクニックと実践例

このチュートリアルでは、PostgreSQLデータベースとSQLAlchemy ORMを使用して、配列に複数の値を含む要素を検索する方法について説明します。要件このチュートリアルを完了するには、次のものが必要です。Python 3.xPostgreSQLデータベース...


Firestoreのランダムドキュメント取得:パフォーマンスと整合性を考慮した最良の方法とは?

方法 1: コレクション全体からランダムに1件取得この方法は、最もシンプルで使いやすい方法です。ただし、コレクション内のドキュメント数が非常に多い場合、パフォーマンスが低下する可能性があります。方法 2: フィールド値に基づいてランダムに1件取得...


SQL SQL SQL SQL Amazon で見る



コマンドライン引数を使ってPostgreSQLの.sqlファイルを自動的に実行する

psql コマンドは、PostgreSQL サーバに接続して SQL コマンドを実行するためのコマンドラインツールです。このコマンドを使用して、 .sql ファイルの内容を実行することができます。例:このコマンドは、次のことを実行します。-d postgres オプションは、接続するデータベースの名前を指定します。