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


278

テーブルにデータを挿入しました。行と列、およびデータを含むテーブル全体が表示されます。コマンドで表示するにはどうすればよいですか?

回答:


475

psql -U username -d mydatabase -c 'SELECT * FROM mytable'

postgresqlに慣れておらず、コマンドラインツールの使用に慣れていないpsql場合は、対話型セッションを開始したときに注意する必要がある混乱する動作があります。

たとえば、インタラクティブセッションを開始します。

psql -U username mydatabase 
mydatabase=#

この時点でクエリを直接入力できますが、クエリをセミコロンで終了することを忘れないでください;

例えば:

mydatabase=# SELECT * FROM mytable;

セミコロンを忘れた場合、Enterキーpsqlを押しても、クエリの入力が完了していないと想定されるため、リターン行には何も表示されません。これは、あらゆる種類の混乱につながる可能性があります。たとえば、同じクエリを再入力すると、構文エラーが発生する可能性が高くなります。

実験として、psqlプロンプトで必要な文字化けを入力してEnterキーを押してみてください。psql静かに新しいラインを提供します。その新しい行にセミコロンを入力してEnterキーを押すと、次のエラーが表示されます。

mydatabase=# asdfs 
mydatabase=# ;  
ERROR:  syntax error at or near "asdfs"
LINE 1: asdfs
    ^

経験則としては、応答がpsqlなくても、少なくともSOMETHINGを期待している場合は、セミコロンを忘れました。;


4
少なくとも7.2(私が気になっていたところまでさかのぼりますが、それよりも早い可能性があります)以降、psqlにはセミコロンを追加する必要なしにすべてのコマンドを即時に実行するオプション--single-line(または-s)がありました。
ゴードン

3
1時間のデバッグに費やしましたが、問題はセミコロンの欠落でした。ありがとう
ドーソンB

106
SELECT * FROM my_table;

my_tableテーブルの名前はどこですか。

編集:

psql -c "SELECT * FROM my_table"

または単にpsql、次にクエリを入力します。


7
psql -U username -c your_database "SELECT * FROM my_table"
DrColossos 2013年

3
前述のとおりコマンドはセミコロンで終了する必要があります Windowsシステムを使用している場合は、 基本的にWindowsユーザーのnotwsを参照してcmd.exe /c chcp 1252ください。コンソールプロンプトを開いた直後に配置してください。
D_Guidi 2014

2
今後のユーザーの場合は、データベース名の前に-dを、クエリの前に-cを必ず追加してください:psql -U username -d mydatabase -c 'SELECT * FROM
mytable

2
私のために働いていなかった.Iはなかったpsql: FATAL: database "SELECT * FROM tb_name" does not exist
Jaswinder

@DrColossosが示したように、少なくともWindowsのcli / batch環境では、コマンドを二重引用符で囲む必要があるようです。
jewbix.cube 2016年

43

DBがパスワードで保護されている場合、解決策は次のとおりです。

PGPASSWORD=password  psql -U username -d dbname -c "select * from my_table"

3
この方法でパスワードを提供できるかどうかはわかりません。テストをするときにとても便利です。ありがとう
zhihong

21

アプリケーション(Mac)から「SQLシェル(psql)」を開きます。

ここに画像の説明を入力してください

Enterをクリックしてデフォルトの設定を行います。プロンプトが表示されたらパスワードを入力します。

ここに画像の説明を入力してください

*)\?ヘルプのタイプ

*)入力\conninfoして、接続しているユーザーを確認します。

*)入力\lすると、データベースのリストが表示されます。

ここに画像の説明を入力してください

*)\c <Name of DB>たとえば、によってデータベースに接続します\c GeneDB1

ここに画像の説明を入力してください

次のように、キープロンプトが新しいDBに変更されます。 ここに画像の説明を入力してください

*)特定のDBにいるので、そのDBのスキーマを知りたいと思います。これを行うのに最適なコマンドは\dnです。

ここに画像の説明を入力してください

同様に機能する(ただし、あまり良くない)他のコマンドはselect schema_name from information_schema.schemata;select nspname from pg_catalog.pg_namespace;次のとおりです。

ここに画像の説明を入力してください

-)スキーマが作成されたので、それらのスキーマ内のテーブルについて知りたいと思います。そのためには、dtコマンドを使用できます。例えば\dt "GeneSchema1".*

ここに画像の説明を入力してください

*)これでクエリを実行できます。例えば:

ここに画像の説明を入力してください

*)上記のDB、スキーマ、テーブルはpgAdminで次のように表示されます。

ここに画像の説明を入力してください


3
  1. コマンドプロンプトを開き、Postgresがインストールされているディレクトリに移動します。私の場合、私のPostgresパスは「D:\ TOOLS \ Postgresql-9.4.1-3」です。その後、Postgresのbinディレクトリに移動します。コマンドプロンプトは「D:\ TOOLS \ Postgresql-9.4.1-3」と表示されます。 \ bin>」
  2. 現在の目標は、「UserId」の値を使用してusersテーブルから「UserName」を選択することです。したがって、データベースクエリは「Select u。 "UserName" from users u Where u。 "UserId" = 1」です。

同じクエリは、postgresのpsqlコマンドプロンプトに対して以下のように記述されます。

D:\ TOOLS \ Postgresql-9.4.1-3 \ bin> psql -U postgres -d DatabaseName -h localhost-t -c "Select u。\" UserName \ "from users u Where u。\" UserId \ "= 1;


3

@Grantの回答には間違いありません。しかし、列名がナチュラルのようなpostgresqlの予約済みキーワードに似ている場合など、いくつかの問題に直面することがあります。この場合、クエリフィールドで "\ natural \"が必要になるため、コマンドラインから同様のSQLを実行することが困難です。したがって、私のアプローチは、SQLを別のファイルに書き込み、SQLファイルをコマンドラインから実行することです。これには別の利点もあります。大きなスクリプトのクエリを変更する必要がある場合は、スクリプトファイルやコマンドを変更する必要はありません。このようなSQLファイルのみを変更してください

psql -h localhost -d database -U postgres -p 5432 -a -q -f /path/to/the/file.sql

3

また、クエリが

SELECT * FROM tablename;

psqlコマンドプロンプトでエラーが発生し、

SELECT * FROM "tablename";

正常に動作し、本当に奇妙なので、二重引用符を忘れないでください。私はいつもデータベースが好きでした:-(


-8

特定のタイプのステートメントについては、より適切に使用できます。それAzure Data Studio以外の場合は、組み込みのコマンドラインが付属しています。スタジオを使用すると、タイプ入力ステートメントを見つけ、出力をより快適に読み取ることができます。

以下の手順に従ってください:

  1. Azure Data Studioのインストール-データ開発に焦点を当てたクロスプラットフォームの最新エディターです。それはオープンソースであり、拡張可能です-PostgreSQL自体が基づいている2つのこと。
  2. PostgreSQL拡張機能をインストールする
  3. ローカルサーバーまたはリモートサーバーに接続します。

    ここに画像の説明を入力してください

  4. SQLの記述と実行のみに焦点を当てます。

    ここに画像の説明を入力してください

接続を保存したり、サーバーグループを作成したり、さらにを介してタスクを実行する方が快適な場合は組み込み端末を作成したりするなど、多くの優れた機能がありますpsql

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.