【问题标题】:How to connect and execute a SQL file non interactively using psql?如何使用 psql 以非交互方式连接和执行 SQL 文件?
【发布时间】:2021-12-30 16:46:58
【问题描述】:

我正在尝试使用 psql 运行以下命令,但 --file 参数被忽略事件,我设法连接到数据库。

psql "postgresql://postgres:admin12345@localhost:5432/Phoenix" -f "tables/book.sql"

终端上的输出如截图所示。

我在这里缺少什么?提前致谢。

【问题讨论】:

  • 它可能只是你的字体,但 -f 看起来不像是正确的 f
  • 注意警告并查看此处的“Windows 用户注意事项”psql
  • @Bergi 你说得对,只是字体哈哈。
  • 那是什么终端?
  • @Bergi 这是一个名为 Cmder 的控制台模拟器。你可以在这里找到它cmder.net

标签: windows postgresql psql


【解决方案1】:

在谷歌搜索并浪费时间测试不同的 SO 答案之后,这对我有用:

psql -f "tables/book.sql" "postgresql://postgres:admin12345@localhost:5432/Phoenix"

看起来 psql 命令要求命令行参数出现在连接字符串之前。这有点奇怪,但它对我有用。

引号也是可选的。这也有效:

psql -f tables/book.sql postgresql://postgres:admin12345@localhost:5432/Phoenix

我尝试更改代码页,如 psql 文档 psql docmentation 中的“Windows 用户注释”部分所示。结果是警告不再显示,但如果连接字符串在它们之前,命令行参数仍然会被忽略,如下面的日志所示:

C:\Users\Zack
λ cmd.exe /c chcp 1252

Active code page: 1252

C:\Users\Zack
λ psql postgresql://postgres:admin12345@localhost:5432/Phoenix -f "tables/book.sql"

psql: warning: extra command-line argument "tables/book.sql" ignored
psql (13.2)
Type "help" for help.

Phoenix=#

Theo 现在唯一对我有用的解决方法是将其他 args 置于连接字符串之前。

如果有人知道为什么命令行参数应该在连接字符串之前,请提供更多详细信息。

【讨论】:

  • 它们不必位于连接字符串之前。 psql "postgresql://postgres:@localhost:5432/test" -f "test_sql.sql" psql -d test -U postgres -f "test_sql.sql" 在 Linux 上对我来说工作得很好。
  • @AdrianKlaver 我不在 Linux 机器上。它在 Windows 上对我不起作用。
  • 我知道。阅读我在之前评论中发布的链接中的“Windows 用户注意事项”部分。
  • @AdrianKlaver 我尝试了这些指令,但我仍然得到相同的行为。我更新了答案以提供更多详细信息。
猜你喜欢
  • 1970-01-01
  • 2020-07-04
  • 2011-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多