[英]Cant add data to my database PSQL, column “column_name” of relation “table_name” does not exist
[英]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'。 请注意,这与双引号字符 (") 不同。
双引号用于表或列标识符:
还有第二种标识符:分隔标识符或带引号的标识符。 它是通过用双引号 (") 将任意字符序列括起来而形成的。分隔标识符始终是标识符,而不是关键字。因此,“select”可用于引用名为“select”的列或表,而未加引号的 select 将被视为关键字,因此在需要表名或列名的地方使用时会引发解析错误。该示例可以使用带引号的标识符编写,如下所示:
UPDATE "my_table" SET "a" = 5;
请参阅同一手册的第 4.1.1 节。
结合这里的帖子和其他帖子解决了这个问题:
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.