簡體   English   中英

Docker PSQL 查詢問題:“列<column_name>不存在”

[英]Docker PSQL Query Issue: "Column <column_name> does not exist"

我正在嘗試通過 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 容器實現的。

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 節。

結合這里的帖子和其他帖子解決了這個問題:

  1. 字符串查詢需要使用單引號
  2. 在 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;\""

暫無
暫無

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

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