我可以将 .sql 文件传递​​给 psql 吗?

Can I pass a .sql file to psql?

我正在尝试将 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:/# 

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

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

-f filename --file=filename

Read commands from the file filename, rather than standard input

还有:

-c command --command=command

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

我尝试了 file=query.sql,但失败并显示错误消息 above.The 命令一个想要一个字符串,而我想传递一个 .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 以便 运行 查询?

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

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

因为其他答案似乎忽略了这一点。

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

#!/usr/bin/env bash

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

psql "${psql_args[@]}"