使用psql命令行时出现带引号的字符串解释问题



假设PostgreSQL 10数据库中的一个表名为"Measurement",并且(除其他外(有一列名为文本类型的"Name"。

我想列出所有具有特定名称的记录,所以sql语句:

SELECT * FROM public."Measurement" WHERE "Measurement"."Name" = 'nazwa1';

在pgAdmin SQL编辑器中运行良好。

我想向服务器询问同样的情况,但由于psql在Ubuntu的命令行中工作,类似于以下内容:

psql --host 127.0.0.1 --dbname BazaDanych --username postgres --port 5432 --echo-all --no-align --command 'SELECT * FROM public."Measurement" WHERE "Measurement"."Name" = 'nazwa1';' --log-file /home/user/wynik.log -o /home/user/dane.csv -P fieldsep=',' -P footer='off'

它不起作用,因为shell无法识别该语句中的单引号,并且它导致了报告为"列不存在"的问题,如下所示:

public."Measurement" WHERE "Measurement"."Name" = nazwa1

"nazwa1"字符串不被解释为要与记录进行比较的值,而是被解释为列名。

我尝试了很多方法,如:\、双引号和其他许多方法,但都没有成功。

如何解决此问题?有人能纠正我的命令吗?

幸运的是,我找到了它!

需要两个步骤:

  1. 将外部单引号替换为引号('->"(
  2. 在内部引号("->\"(之前添加\

因此,下面的代码运行良好:

psql --host 127.0.0.1 --dbname BazaDanych --username postgres --port 5432 --echo-all --no-align --command "SELECT * FROM public."Measurement" WHERE "Measurement"."Name" = 'nazwa1';" --log-file /home/user/wynik.log -o /home/user/dane.csv -P fieldsep=',' -P footer='off'

这可能对某人有帮助。如果没有,管理员,请删除我的帖子。