【问题标题】:Can I pass a .sql file to psql?我可以将 .sql 文件传递​​给 psql 吗?
【发布时间】:2021-12-09 17:40:06
【问题描述】:

我正在尝试将 sql 文件传递​​给 psql。看完the docs,试了一下:

psql_args=(
    "password='$INPUT_PASSWORD'"
    dbname=analytics
    "host='$INPUT_HOST'"
    user=analytics
    port=32648
    file=query.sql
)

psql "${psql_args[*]}"
psql: error: invalid connection option "file"
root@380773cb4e26:/# 

如果我删除 file=query.sql 参数,这将导致连接到 psql。我只是不知道如何将查询文件传递给它?

在文档中,这里有两个参数看起来很有趣:

-f 文件名 --file=文件名

Read commands from the file filename, rather than standard input

还有:

-c 命令 --command=command

Specifies that psql is to execute the given command string, command

我尝试了file=query.sql,但由于上面的错误消息而失败。命令需要一个字符串,而我想传递一个 .sql 文件。反正我试过了:

psql_args=(
    "password='$INPUT_PASSWORD'"
    dbname=analytics
    "host='$INPUT_HOST'"
    user=analytics
    port=32648
    command=query.sql
)

psql "${psql_args[*]}"
psql: error: invalid connection option "command"

有没有办法可以将 query.sql 传递给 psql 以运行查询?

【问题讨论】:

  • 这应该是哪种语言?
  • psql - 从终端查询 postgres
  • 但是您正试图从 (bash) shell 调用 psql?
  • "${psql_args[*]}" 将您的数组扩展为单个字符串。您需要使用 "${psql_args[@]}" 将数组扩展为单独的参数。

标签: postgresql bash shell sh psql


【解决方案1】:

您似乎正在将选项打包成一个连接字符串。但是 --file 必须直接作为 psql 的选项给出,而不是作为连接字符串的一部分。

psql "${psql_args[*]}" --file=query.sql

【讨论】:

  • 您能否修复您的答案,将"${psql_args[*]}" 替换为"${psql_args[@]}" 并在psql_args 数组中包含--file=query.sql
  • @LéaGris 我不太了解这些 shell 功能,但这对我不起作用。然后其他选项开始被误解。
  • 了解 bash 数组扩展 @jjanes
  • 我怀疑只是阅读它会导致其他选项开始被正确解释(特别是不是'密码',因为你不能只添加两个连字符并让它工作)。同时,我已经知道如何解决问题,不那么聪明,而不是更聪明。
【解决方案2】:

由于其他答案似乎忽略了这一点。

以下是如何将动态选项存储到数组中,并将其作为参数传递给命令:

#!/usr/bin/env bash

psql_args=(
    "--dbname=analytics"
    "--host=$INPUT_HOST"
    "--user=analytics"
    "--port=32648"
    "--file=query.sql"
)

psql "${psql_args[@]}"

【讨论】:

  • 谢谢!很高兴知道。
  • 但这不起作用,因为--password 故意不接受 psql 中的参数:psql: option '--password' doesn't allow an argument
  • @jjanes 然后删除--password 这将是一件好事,因为将密码作为参数传递无论如何都会带来巨大的安全风险。请改用 pgsql 推荐的身份验证方法。这怎么可能是个问题?
猜你喜欢
  • 2019-11-20
  • 1970-01-01
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多