スクリプト自動化を加速!PostgreSQLコマンドラインパラメータの徹底解説
PostgreSQL: コマンドラインからパラメータを渡す方法
方法
パラメータを渡す方法はいくつかありますが、代表的なものは以下の2つです。
psqlコマンドの-vオプション
-v
オプションは、キー=値形式でパラメータを指定することができます。
psql -v param1=value1 -v param2=value2 database_name
この例では、param1
とparam2
という2つのパラメータを、それぞれvalue1
とvalue2
という値に設定して、database_name
というデータベースに接続しています。
SQLクエリ内のプレースホルダ
SQLクエリ内に$
記号で始まるプレースホルダを記述し、コマンドラインから値を渡すことができます。
psql database_name -c "SELECT * FROM table WHERE id = $1" 10
この例では、table
テーブルからid
が10であるレコードを検索するクエリを実行しています。クエリ内の$1
というプレースホルダには、コマンドラインで渡された10
という値が代入されます。
- 複数のパラメータを渡す場合は、
-v
オプションを複数回指定することができます。 - プレースホルダは、
$1
のように番号で指定することも、$param1
のように名前で指定することもできます。
例
コマンドラインからパラメータを渡すことで、以下のような操作を実行することができます。
- 特定の条件に合致するデータを検索する
- データを更新する
- レポートを作成する
これらの操作をスクリプト化することで、自動化を実現することができます。
PostgreSQLコマンドラインからパラメータを渡す方法は、さまざまな操作を動的に実行するために非常に便利な機能です。上記の解説を参考に、ぜひ活用してみてください。
psqlコマンドの-vオプション
# ユーザー情報を取得するスクリプト
# コマンドラインからユーザーIDを受け取る
psql -v user_id=123 database_name -f get_user_info.sql
# get_user_info.sql
SELECT *
FROM users
WHERE id = $user_id;
SQLクエリ内のプレースホルダ
# 特定の年齢以上のユーザー情報を取得するスクリプト
# コマンドラインから年齢を受け取る
psql database_name -c "SELECT * FROM users WHERE age >= $1" 20
# 出力例
# id | name | age
# --- | ---- | ----
# 123 | 山田太郎 | 25
# 456 | 佐藤花子 | 32
複数のパラメータ
# 商品情報を更新するスクリプト
# コマンドラインから商品IDと価格を受け取る
psql -v product_id=123 -v price=1000 database_name -f update_product.sql
# update_product.sql
UPDATE products
SET price = $price
WHERE id = $product_id;
補足
- 上記のサンプルコードは、PostgreSQL 15.1をベースにしています。
- スクリプトを実行する前に、必要な権限を持っていることを確認してください。
PostgreSQLコマンドラインからパラメータを渡すその他の方法
環境変数を使用してパラメータを渡すことができます。
# 環境変数にパラメータを設定
export PGUSER=postgres
export PGPASSWORD=password
# コマンドラインでデータベースに接続
psql database_name
この例では、PGUSER
とPGPASSWORD
という環境変数に、データベース接続に必要なユーザー名とパスワードを設定しています。
# 設定ファイル(~/.psqlrc)
host = localhost
port = 5432
database = my_database
username = postgres
password = password
# コマンドラインでデータベースに接続
psql
この例では、~/.psqlrc
という設定ファイルに、データベース接続に必要な情報を記述しています。
プログラム
PythonやGoなどのプログラミング言語を使用して、パラメータを渡すプログラムを作成することができます。
import psycopg2
# コマンドラインからパラメータを受け取る
param1 = input("パラメータ1を入力してください: ")
param2 = input("パラメータ2を入力してください: ")
# データベースに接続
conn = psycopg2.connect(
database="my_database",
user="postgres",
password="password",
)
# クエリを実行
cursor = conn.cursor()
cursor.execute("SELECT * FROM table WHERE param1 = %s AND param2 = %s", (param1, param2))
# 結果を表示
for row in cursor:
print(row)
# 接続を閉じる
cursor.close()
conn.close()
この例では、Pythonを使用して、コマンドラインから受け取ったパラメータを元にデータベースを検索するプログラムを作成しています。
コマンドラインからパラメータを渡す方法は、目的に応じて最適な方法を選択する必要があります。上記の解説を参考に、ぜひ使い分けてみてください。
postgresql parameters