簡體   English   中英

從命令行運行 PostgreSQL 查詢

[英]Run PostgreSQL queries from the command line

我將數據插入到表中......我現在想查看包含行、列和數據的整個表。 我如何通過命令顯示它?

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

如果您是 postgresql 新手並且不熟悉使用命令行工具psql ,那么當您進入交互式會話時,您應該注意一些令人困惑的行為。

例如,啟動一個交互式會話:

psql -U username mydatabase 
mydatabase=#

此時您可以直接輸入查詢,但您必須記住用分號終止查詢;

例如:

mydatabase=# SELECT * FROM mytable;

如果您忘記了分號,那么當您按下回車鍵時,您的返回行將一無所獲,因為psql將假定您尚未完成輸入查詢。 這會導致各種混亂。 例如,如果您重新輸入相同的查詢,您很可能會產生語法錯誤。

作為一個實驗,嘗試在 psql 提示符下輸入任何你想要的亂碼,然后按回車鍵。 psql將默默地為您提供一個新行。 如果您在該新行上輸入一個分號,然后按 Enter,那么您將收到錯誤:

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

經驗法則是:如果您沒有收到來自psql的響應,但您至少期待某事,那么您忘記了分號;

SELECT * FROM my_table;

其中my_table是您的表的名稱。

編輯:

psql -c "SELECT * FROM my_table"

或者只是psql然后鍵入您的查詢。

如果您的數據庫受密碼保護,那么解決方案是:

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

從您的應用程序 (Mac) 打開“SQL Shell (psql)”。

在此處輸入圖像描述

點擊進入默認設置。 出現提示時輸入密碼。

在此處輸入圖像描述

*) 鍵入\? 求助

*) 鍵入\conninfo以查看您連接的用戶。

*) 鍵入\l以查看數據庫列表。

在此處輸入圖像描述

*) 通過\c <Name of DB>連接到數據庫,例如\c GeneDB1

在此處輸入圖像描述

您應該看到鍵提示更改為新數據庫,如下所示: 在此處輸入圖像描述

*) 現在你在一個給定的數據庫中,你想知道那個數據庫的模式。 執行此操作的最佳命令是\dn

在此處輸入圖像描述

其他也可以工作(但效果不佳)的命令是select schema_name from information_schema.schemata; select nspname from pg_catalog.pg_namespace;

在此處輸入圖像描述

-) 現在您已經有了 Schemas,您想知道這些 Schemas 中的表。 為此,您可以使用dt命令。 例如\dt "GeneSchema1".*

在此處輸入圖像描述

*) 現在您可以進行查詢了。 例如:

在此處輸入圖像描述

*) 以下是上述 DB、Schema 和 Tables 在 pgAdmin 中的樣子:

在此處輸入圖像描述

我還注意到查詢

選擇 * FROM 表名;

在 psql 命令提示符上給出錯誤,並且

選擇 * 從“表名”;

運行良好,真的很奇怪,所以不要忘記雙引號。 我一直喜歡數據庫:-(

我對@Grant 的回答毫不懷疑。 但是我有時會遇到一些問題,例如列名是否類似於 postgresql 的任何保留關鍵字,例如natural在這種情況下,很難從命令行運行類似的 SQL,因為在 Query 字段中將需要“\natural\”。 所以我的方法是在單獨的文件中編寫 SQL 並從命令行運行 SQL 文件。 這也有另一個優勢。 如果您必須更改大型腳本的查詢,則無需觸及腳本文件或命令。 只更改這樣的 SQL 文件

psql -h localhost -d database -U postgres -p 5432 -a -q -f /path/to/the/file.sql
  1. 打開命令提示符並轉到 Postgres 的安裝目錄。 在我的情況下,我的Postgres 路徑是“D:\TOOLS\Postgresql-9.4.1-3”。之后移動到 Postgres 的 bin 目錄。所以命令提示符顯示為“D:\TOOLS\Postgresql-9.4.1-3 \bin>"
  2. 現在我的目標是使用“UserId”值從用戶表中選擇“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個;

我將在 Windows 機器上添加我對一個命令的經驗。 我想嘗試運行單個命令,從中獲取表格內容。

這是對我有用的單個命令:

psql -U postgres -d typeorm -c "SELECT * FROM \"Author\"";

  • -U postgres - 用戶
  • -d typeorm - 我要連接的數據庫
  • -c ... - 我的查詢命令
  • ; - 分號

我遇到了問題,主要是弄清楚如何准確設置查詢部分。 我嘗試使用不同的命令,例如:使用 '、"、(),但除了這個符號外,沒有什么對我有用。

用於在受密碼保護的數據庫中直接運行 SQL 命令。 它寧願在命令行中使用連接字符串格式。 使用此命令:

psql -d postgresql://postgres:password@localhost:5432/dbname 
-c "create database sample1 --or any command"

## Using SQL file
PGPASSWORD=myPassword psql -h myDbHost -U myUser -p 5432 -d my_db -a -q -f /path/to/sql/file.sql
## Or
PGPASSWORD=myPassword psql -h myDbHost -U myUser -p 5432 -d my_db < /path/to/sql/file.sql

## Using command
PGPASSWORD=myPassword psql -h myDbHost -U myUser -p 5432 -d my_db -c "select * from my table limit 1;"

對於特定類型的語句,您可以找到更適合使用Azure Data Studio -內置命令行附帶的所有其他功能。 在工作室中,您可以找到打字說明並更輕松地閱讀輸出。

請按照以下步驟操作:

  1. 安裝Azure Data Studio-是一個跨平台的現代編輯器,專注於數據開發; 它是開源的,並且是可擴展的-PostgreSQL本身就是基於兩件事。
  2. 安裝PostgreSQL擴展
  3. 連接到本地或遠程服務器:

    在此處輸入圖片說明

  4. 僅專注於編寫和執行SQL:

    在此處輸入圖片說明

許多不錯的功能,例如保存連接,創建服務器組甚至內置終端(如果您更願意通過psql執行某些任務)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM