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