PostgreSQL 印刷変数

Shihab Sikder 2023年6月20日
  1. raise notice を使用して PostgreSQL の変数値を出力する
  2. PostgreSQL で複数の変数値を出力する
PostgreSQL 印刷変数

変数を出力する前に、Postgres 関数またはクエリで変数を宣言する必要があります。 次に、raise notice を使用して、これらの変数の値を出力できます。

raise notice を使用して PostgreSQL の変数値を出力する

製品情報を含む次の表があるとします。

postgres=# select * from product;
 product_id |           product_name           | entered_by | product_price | product_stock
------------+----------------------------------+------------+---------------+---------------
          1 | Mustard - Dijon                  |         10 |         57.44 |           155
          2 | Bacardi Limon                    |          6 |         51.68 |           395
          3 | Chicken - Leg, Fresh             |          6 |         57.88 |           130
          4 | Mcgillicuddy Vanilla Schnap      |          9 |         45.76 |           130

このテーブルには、50 個の製品リストが含まれています。 ここで、製品の平均価格をフォーマットされた文字列で出力したいとしましょう。

したがって、PL/SQL クエリは次のようになります。

do $$
declare
  average product.product_price%type;
  begin
    select avg(product_price)
    from product
    into average;

    raise notice 'Average price is %s', average;
  end; $$;

NOTICE:  Average price is 40.36s

PostgreSQL で複数の変数値を出力する

各 ID の平均製品価格と総在庫数を確認したいとします。 たとえば、ID 1 が 400 の製品を入力し、平均価格は 50 ですのように印刷したいとします。

これを行うコマンドは次のとおりです。

do $$
declare
  average product.product_price%type;
  stock product.product_stock%type;
  id product.entered_by%type;
  begin
    select avg(product_price),sum(product_stock),entered_by
    from product
    into average,stock,id
    WHERE entered_by=1
    GROUP BY ENTERED_BY;
    raise notice 'ID %s entered a total of % products, and the average price is %',id, stock, average;
  end; $$;

NOTICE:  ID 1s entered a total of 1111 products, and the average price is 41.75
DO
postgres=#

そこで、Postgres クエリから複数の変数を出力する方法を次に示します。 この raise notice は、関数内または DO 内で使用できます。

必要に応じて、ループを使用して各行を印刷することもできます。 変数の出力機能の詳細については、こちら から公式ドキュメントを参照してください。

著者: Shihab Sikder
Shihab Sikder avatar Shihab Sikder avatar

I'm Shihab Sikder, a professional Backend Developer with experience in problem-solving and content writing. Building secure, scalable, and reliable backend architecture is my motive. I'm working with two companies as a part-time backend engineer.

LinkedIn Website