PSQL での PostgreSQL クエリの実行

Bilal Shahid 2023年6月20日
  1. PSQL を使用する基本的な方法論
  2. データベースごとに個別にクエリを実行する
  3. セミコロンの代わりに SINGLE LINE 構文を使用する
  4. PSQL での SQL クエリの読み取りにファイルを使用
PSQL での PostgreSQL クエリの実行

PostgreSQL には 2つのオプションがあります。1 番目のオプションは PGADMIN4 または使用するその他のバージョン番号で、2 番目のオプションは PSQL です。 PSQL は、PostgreSQL セッションと対話し、ユーザー インターフェイスからクエリを実行できるコマンド ライン インターフェイスです。

PSQL は端末ベースのフロント エンドであり、ファイルとそのコマンド ラインから引数とクエリを受け取ることもできます。 それでは、PostgreSQL コマンド ラインである PSQL でクエリがどのように機能するかを理解しましょう。

PSQL を使用する基本的な方法論

Postgres のユーザー名とパスワードを使用して PSQL を起動し、正常にログインしたら、PostgreSQL ユーザー インターフェイスで実行するクエリをコマンド ラインで実行する方法を理解します。

SELECTINSERTUPDATE などのキーワードを含むクエリを使用する場合は、不要なエラーを回避するために、正しい構文に従っていることを確認してください。 多くの人がセミコロン;を見落としがちです。

セミコロンがないと、PSQL はクエリがまだ終了していないと見なし、ENTER を押しても終了しません。 したがって、次のように PSQL インスタンスにいるとします。

PSQL コマンド ライン インターフェイス

次に、テーブルをデータベースに INSERT します。 IDMODEL の 2つの列を持つテーブル BAGINSERT したいと考えています。

クエリ:

CREATE table BAG (id INT, model TEXT);

出力:

データベースにテーブルを挿入

セミコロンを入れ忘れて ENTER を押すと、画面に出力が得られず、空白のままになります。

出力:

データベースにテーブルを作成中にエラーが発生しました

同様に、INSERT クエリを実行して、次のようにいくつかの値を入力できます。 (1, Adidas)(2, Jale)(3, Niky)というデータセットをINSERTします。

クエリ:

insert into BAG values (1, 'Adidas'), (2, 'Jale'), (3, 'Niky');

出力:

データセットを挿入

SELECT クエリを実行し、TABLE を返します。

出力:

データベースのデータ テーブルを表示

PSQL でクエリを実行するのは簡単です。 ただし、条件があります。

セミコロン表記のないクエリの前にクエリを実行する傾向がある場合、後者のクエリはまったく機能しません。 したがって、セミコロンなしで SELECT BAG を呼び出してから INSERT 操作を実行すると、PSQL はエラーを表示します。

出力:

セミコロンのないクエリの前にクエリを実行するとエラーが表示されます

SELECT の後にセミコロンを置かないと、クエリが終了しません。 次の INSERT クエリがたまたまこの SELECT クエリに追加され、実行するとエラーが発生しました。

そのため、各ステートメントの最後にあるセミコロンに常に注意することをお勧めします。

データベースごとに個別にクエリを実行する

複数のデータベースを持つことができます。 データベースをリストまたは指定せずにクエリを実行すると、さらに混乱する可能性があります。

まず、すべてのデータベースを表示してみましょう。 PSQL でデータベースを表示するには、以下のクエリを実行できます。

クエリ:

\l or \l+

\l+\l のより説明的なバージョンで、+ が追加されています。 私のデータベースは次のとおりです。

出力:

データベースのリスト

\l+ の場合、結果は次のようになります。

出力:

+追加なしで使用するデータベースのリスト

現在、POSTGRESTEMPLATE0TEMPLATE1 の 3つのデータベースがあります。 また、SELECT ステートメントを使用してそれらを表示することもできます。

クエリ:

SELECT datname from PG_DATABASE:

出力:

  datname
-----------
 postgres
 template1
 template0
(3 rows)

PG_DATABASE はすべてのデータベース情報を格納するカタログであり、DATNAME はデータベースを格納するこのテーブル内の列です。 データベース Postgres に接続するには、\c コマンドを使用しましょう。

指図:

\c postgres

その後、クエリを実行してテーブルを \dt として取得できます。

クエリ:

\dt

出力:

              List of relations
 Schema |      Name       | Type  |  Owner
--------+-----------------+-------+----------
 public | animal          | table | postgres
 public | bag             | table | postgres
 public | bus             | table | postgres
 public | car             | table | postgres
 public | cat             | table | postgres
 public | dog             | table | postgres
 public | horse           | table | postgres
 public | identity_number | table | postgres
 public | mytable         | table | postgres
 public | person          | table | postgres
 public | person_details  | table | postgres
 public | rider           | table | postgres
 public | strings         | table | postgres
 public | student         | table | postgres
 public | tab             | table | postgres
 public | vehicle         | table | postgres
(16 rows)

データベースTEMPLATE0またはTEMPLATE1に接続してテーブルを表示できますが、デフォルト設定により着信ユーザー接続を受け入れないため、エラーが表示されます。

出力:

デフォルト設定接続によるデータベース テーブルの表示エラー

特定のデータベースに対してクエリを実行するには、\c コマンドを使用して接続してからクエリを実行します。

クエリ:

psql -U postgres -d postgres -c "SELECT * from BAG;"

-d キーワードの後、Postgres データベースに接続し、クエリを実行します。 接続するデータベース名を書き込んでから、コマンドを発行しました。

-c の後に単一のコンマでクエリを記述しないでください。エラーが発生します。 二重コンマを使用して有効な文字列にし、最後に安全のためにセミコロンを記述します。

二重カンマを使用しないと、次の例のようなエラーが発生します。

クエリ:

psql -U postgres -d postgres -c 'SELECT * FROM BAG;'

出力:

psql: warning: extra command-line argument "*" ignored
psql: warning: extra command-line argument "FROM" ignored
psql: warning: extra command-line argument "BAG'" ignored

セミコロンの代わりに SINGLE LINE 構文を使用する

-S または --SINGLE-LINE コマンドを使用すると、セミコロンを必要とせずに単一行のクエリを自動的に終了できます。 PostgreSQL セッションを初期化するときに、次のコマンドを実行します。

指図:

psql -U postgres -S

また

psql -U postgres --single-line

PSQL セッションを実行すると、次のようになります。

postgres^# __

これは、postgres#postgres^# に変更されたことを意味し、SINGLE LINE ステートメントの使用を示しています。

クエリ:

select * from BAG

上記のクエリを実行すると、問題なく動作し、末尾にセミコロン (;) が追加されていません。 セッションごとに必要なパスワードでデータベースを保護する場合、PSQL でセッションを初期化するときに PGPASSWORD キーワードを使用できます。

PSQL での SQL クエリの読み取りにファイルを使用

より大きな SQL クエリを読み取るもう 1つの便利な実装は、記述された SQL クエリで .sql 拡張子ファイルを使用し、それを PSQL コマンド ラインから実行することです。 たとえば、次のクエリで .sql 拡張子を持つファイルを作成してみましょう。

クエリ:

SELECT * from BAG;

デスクトップにQUERY1.SQLとして保存しましょう。

SQL拡張子のファイルを作る

PSQL セッションの初期化中にこれを実行するには。 次のコマンドを使用します。

指図:

psql -U postgres -f "C:\Users\Bilal Shahid\Desktop\query1.sql"

出力:

 id |  mode
----+--------
  1 | Adidas
  2 | Jale
  3 | Nikey
  1 | Adidas
  2 | Jale
  3 | Nikey
  1 | Adidas
  2 | Jale
  3 | Nikey
  4 | John
  5 | mike
(11 rows)

-f コマンドに相当する別のコマンドがあります。 既に PSQL セッション内にいて、ファイルからクエリを実行したい場合は、\i コマンド。

クエリ:

postgres=# \i 'C:/Users/Bilal Shahid/Desktop/query1.sql'

バックスラッシュ (/) と単一のコンマ (') を使用しないとエラーが返されます。

PSQL を効率的に使用する方法を学び、エラーを生成するさまざまな方法とその回避方法を理解していただければ幸いです。 注意深い理解を得るために、常にチュートリアルをよく読んでください。

著者: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

関連記事 - PostgreSQL Query