我正在嘗試通過 shell 腳本中的 docker 行內命令執行資料庫查詢。
我的腳本.sh:
docker run -it --rm -c "psql -U ${DB_USER} -d ${DB_NAME} -h ${DB_HOST}\
-c 'select col1, col2 , col3 from table1\
where table1.col2 = \"matching_text\" order by col1;'"
但我得到一個奇怪的錯誤:
ERROR: column "matching_text" does not exist
LINE 1: ...ndow where table1.col2 = "matching_t...
出于某種原因,當我運行它時,psql 認為我的查詢中的 matching_text 指的是列名。我將如何解決這個問題?
注意:我們的資料庫是作為 psql docker 容器實作的。
uj5u.com熱心網友回復:
Postgres 手冊解釋了您需要使用單引號:
SQL 中的字串常量是由單引號 (') 包圍的任意字符序列,例如 'This is a string'。要在字串常量中包含單引號字符,請撰寫兩個相鄰的單引號,例如,'Dianne''s horse'。請注意,這與雙引號字符 (") 不同。
請參閱postgres 手冊的第 4.1.2.1 節。
雙引號用于表或列識別符號:
還有第二種識別符號:分隔識別符號或帶引號的識別符號。它是通過用雙引號 (") 將任意字符序列括起來而形成的。分隔識別符號始終是識別符號,而不是關鍵字。因此,“select”可用于參考名為“select”的列或表,而未加引號的 select 將被視為關鍵字,因此在需要表名或列名的地方使用時會引發決議錯誤。該示例可以使用帶引號的識別符號撰寫,如下所示:
UPDATE "my_table" SET "a" = 5;
請參閱同一手冊的第 4.1.1 節。
uj5u.com熱心網友回復:
結合這里的帖子和其他帖子解決了這個問題:
- 字串查詢需要使用單引號
- 在 psql 命令中對 -c 使用雙引號(答案執行緒)
docker run -it --rm -c "psql -U ${DB_USER} -d ${DB_NAME} -h ${DB_HOST}\
-c \"select col1, col2 , col3 from table1\
where table1.col2 = 'matching_text' order by col1;\""
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/337783.html
標籤:PostgreSQL 码头工人 查询语句
上一篇:【歷史上的今天】10 月 26 日:NetBSD 系統發布;Windows 8 誕生;微軟推出 Surface 系列
下一篇:為什么這是空的?
