假设 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' 字符串不被解释为要与记录进行比较的值,而是作为列名。
我尝试了很多方法,如:\',双引号和许多其他方法,但没有成功。
如何解决这个问题?有人可以纠正我的命令吗?
最佳答案
幸运的是,我找到了!
需要两个步骤:
因此,下面的代码可以正常工作:
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 - 使用 psql 命令行时引用字符串解释的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53187355/