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

Shell 使用psql命令行时引用的字符串解释出现问题,shell,ubuntu,command-line,psql,postgresql-10,Shell,Ubuntu,Command Line,Psql,Postgresql 10,假设PostgreSQL 10数据库中的一个表名为“Measurement”,其中有一列名为文本类型的“Name” 我想列出所有具有特定名称的记录,因此sql语句: SELECT * FROM public."Measurement" WHERE "Measurement"."Name" = 'nazwa1'; 在pgAdmin SQL编辑器中工作良好 我想问服务器关于同样的问题,但在Ubuntu上,psql在命令行中工作,类似这样: psql --host 127.0.0.1 --dbnam

假设PostgreSQL 10数据库中的一个表名为“Measurement”,其中有一列名为文本类型的“Name”

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

SELECT * FROM public."Measurement" WHERE "Measurement"."Name" = 'nazwa1';
在pgAdmin SQL编辑器中工作良好

我想问服务器关于同样的问题,但在Ubuntu上,psql在命令行中工作,类似这样:

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无法识别该语句中的单引号,并且导致问题报告为“column not Existence”,因此该语句不起作用,如下所示:

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'
    

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

    幸运的是,我找到了它

    需要两个步骤:

  • 将外部单引号替换为引号(“->”)
  • 在内部引号(“->\”)之前添加\项
  • 因此,下面的代码可以正常工作:

    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'
    
    这可能对某人有帮助。如果没有,管理员,请删除我的帖子