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

标签 shell ubuntu command-line psql postgresql-10

假设 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/

    相关文章:

    python - 在 Windows 上,如何使用 Python 2.7 子进程保护 shell 脚本的参数?

    c - C 中使用 pipe()、execlp() 和 dup() 的三重管道

    ubuntu - 无法在 AWS EC2 Ubuntu 14.04 上运行 confluence

    linux - 无法创建 '/var/www/html/myproject/.git/index.lock'只读文件系统

    java - 从带文件结尾的命令行运行 Java 与不带文件结尾的 Java 之间的区别

    python - 如何在命令行中将参数传递给文件并使用 python 更改文件中的字符串?

    linux - 是否有一个 linux 程序可以连续运行另一个程序而不会闪烁?

    c# - .net6 没有在 ubuntu 20.04 上运行的快速修复

    git - 在哪里输入git命令?

    c++ - 在隐藏其输出的同时在 C++ 中执行 Linux shell 命令