【问题标题】:linux shell execute an SQL querylinux shell 执行 SQL 查询
【发布时间】:2021-12-11 06:35:58
【问题描述】:

我在登录到数据库后尝试执行 sql 查询。尽管 Postgres 官方文档提到了选项 c,但我一直收到错误消息,说 command 、 -c 、 --c 不是有效选项。

下面是我的 shell 脚本文件中的行。

psql "host='localhost' port=xxxx dbname='xxxxx' user='xxxx' password='xxxxx' -c='sql string'"

【问题讨论】:

  • 双引号是怎么回事? (顺便说一句,一般而言,将密码放在命令行上是一个非常糟糕的主意;将它放在进入环境的命令的左侧会更安全一些;把它右侧表示系统上的每个人/所有人都可以通过ps 看到它。
  • 我只是不断收到一条错误消息,说 c 选项无效。
  • (这并不意味着我们需要您的密码等,但我们确实需要在不更改运行时与您的实际命令相同的失败方式,并且 exact 错误信息,而不是英文解释)
  • 我不明白你最后的评论。 psql 从 *.sh 文件中调用。我基本上是在终端中运行文件。
  • 如果我删除 c 选项一切正常。我将不得不在终端中手动输入我的选择语句

标签: linux postgresql shell psql


【解决方案1】:

您正在混合使用长选项语法和短选项语法...

这个:

#!/bin/sh
echo "Connect to DB"
psql "host='localhost' port=xxxx dbname='xxxxx' user='xxxx' password='xxxxx'" -c='select * from pg_stat_archive'

需要:

#!/bin/sh
echo "Connect to DB"
psql "host='localhost' port=xxxx dbname='xxxxx' user='xxxx' password='xxxxx'" -c 'select * from pg_stat_archive'

等号仅用于长格式:--command=command

【讨论】:

  • 它也不起作用。
【解决方案2】:

在你的 shell 脚本中使用 here doc 来避免 -c 的终止和行为

psql

有关具体行为和示例,请参见此处 https://www.postgresql.org/docs/12/app-psql.html

【讨论】:

    【解决方案3】:

    -c 选项必须根据@Charles Duffy 的评论放在前面

    #!/bin/sh
    echo "Connect to DB"
    psql -c 'select * from any_table' "host='localhost' port=xxxx dbname='xxxxx' user='xxxx' password='xxxxx'"
    

    【讨论】:

    • 请格式化您的帖子,以便代码行显示在单独的行中。
    猜你喜欢
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    • 2018-02-01
    • 1970-01-01
    相关资源
    最近更新 更多