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

时间:2018-11-07 10:12:27

标签: shell ubuntu command-line psql postgresql-10

假设PostgreSQL 10数据库中的一个表称为“度量”,并且(其中包括)一列名为“名称”的文本类型。

我想列出所有具有特定名称的记录,因此使用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'

由于该语句的单引号不能被外壳识别,并且导致报告“列不存在”的问题,因此它不起作用,如下所示:

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

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

我尝试了许多方法,例如:\',将单引号和许多其他双引号加倍,但是没有成功的结果。

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

1 个答案:

答案 0 :(得分:0)

幸运的是,我找到了!

需要两个步骤:

  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'

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