使用 \! 命令在 psql shell 中执行命令

8
有没有办法在使用 \!psql 中运行 shell 命令时,捕获 shell 输出(在 psql 变量中)和/或退出代码?文档没有提供任何细节。
3个回答

3

使用 \!\o

您可以像这样将两者组合起来使用:

  • \! echo "SELECT 1;" > bar(运行命令echo "SELECT 1;",将SELECT 1;的输出重定向到bar
  • \o bar(在bar中运行命令)

@TobiM 不错的发现,已修复。 - undefined

1
似乎对于\!来说是不可能的,但可以从外部命令输出中设置一个变量。
testdb=> \set content `cat my_file.txt`

然后在 SQL 表达式中使用这个变量,如下所示:

testdb=> INSERT INTO my_table VALUES (:'content');

-1

你可以使用\o <文件名>选项来指定输出文件,或者使用COPY命令来解决你的问题。


我不确定\o有什么用。如果我正在运行一个shell命令,我总是可以将其输出重定向到文件。而且我也不确定COPY有什么用。我不是在尝试加载数据。 - Sim
好的,我想这取决于你想要实现什么,对于批量DDL更新,我经常使用\o(https://github.com/dsavinkov/shell/blob/master/update_all_postgres_schemas.sh)。我猜这不是你的情况。 - Dmitry S
这可能是你正在寻找的:https://dev59.com/aWjWa4cB1Zd3GeqPtblp - Dmitry S
1
你指向的SO问题是关于从psql中捕获SQL输出。我想要在psql中捕获shell输出和退出代码。 - Sim
根据文档所述,您可以通过捕获shell退出状态并使用元命令来实现您想要的功能。为什么不能使用退出代码?@Sim - Dmitry S
1
我еЏҮд»ӨжҚ•иҺ·psqlзљ„shellйЂЂе‡ғзЉ¶жЂЃпәЊдҢ†ж€‘жІҰ有看到有关如дҢ•жҚ•иҺ·йЂљиү‡\!иүђиҰЊзљ„д»»дҢ•е†…е®№зљ„йЂЂе‡ғзЉ¶жЂЃзљ„ж–‡жҰӘгЂ‚дҢ жњ‰еђ—пәџ - Sim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接