【问题标题】:store postgresql result in bash variable将 postgresql 结果存储在 bash 变量中
【发布时间】:2013-03-06 08:53:31
【问题描述】:

如何像下面的脚本一样在 bash 变量上提取标量 postgresql 值?

dbname="testlauf"
username="postgres"

vartest='psql -c -d $dbname -U $username -h localhost -p 5432 "SELECT gid FROM testtable WHERE aid='1';"'
echo "$vartest"

我尝试了几种不同的作品,但似乎没有任何效果。提前致谢。

【问题讨论】:

  • 对于命令替换,您必须使用反引号 (`) 或 $()。单引号 (') 不行。
  • 谢谢。但不幸的是,即使 vartest=$(psql -c -d testlauf -U postgres -h localhost -p 5432 "SELECT gid FROM testtable WHERE aid='1';") 也无法做到这一点......它给了我“sytnac error near or at "-d"” 我也用 dbname 尝试过......

标签: bash postgresql variables


【解决方案1】:

-c 选项放在它的参数之前 - 查询。还请注意使用附加的-t 选项来获取元组值。当然,使用反引号 (`) 运算符。

还建议使用-X 选项,因为有时.psqlrc 文件可能会添加一些冗余输出,以及禁用列对齐(空格)的-A 选项。

要跳过 NOTICE 或其他附加消息,请包含 -q 标志。

vartest=`psql -d $db -U $user -AXqtc "SELECT gid FROM testtable WHERE aid='1'"`

【讨论】:

  • 非常感谢 Kouber,这成功了!实际上反引号似乎仍然对我不起作用,但是 ($) 确实: vartest=$(psql -X -h localhost -p 5432 -d testlauf -U postgres -c "SELECT gid FROM testtable WHEREaid='1' ;")
  • 如何在where条件下使用动态bash脚本变量或psql变量
【解决方案2】:

使用 -t 选项或 --tuples-only 只会为您提供行,因此将它们存储在数组变量中会更容易(如果查询的结果不止一个)

vartest =(`psql -t -d $dbname -U $username -c "SELECT gid FROM testtable WHERE aid='1';"`)
echo $vartest

示例:

查询结果

ubuntu@ratnakri:~$ psql -h localhost -p 5432 -t -U postgres -d postgres -c "select slot_name from pg_replication_slots"
barman
barman2

把它变成数组变量

    ubuntu@ratnakri:~$ RESULT=(`psql -h localhost -p 5432 -t -U postgres -d postgres -c "select slot_name from pg_replication_slots"`)
    ubuntu@ratnakri:~$ echo ${RESULT[0]}
    barman
    ubuntu@ratnakri:~$ echo ${RESULT[1]}
    barman2

【讨论】:

  • 如何在远程主机上执行这个命令?如何输入数据库密码?
  • 在远程主机上执行有多种方式,但是对于db密码,postgresql默认设置为在unix上使用peer身份验证,只是不要指定-h localhost来使用它-跨度>
猜你喜欢
  • 1970-01-01
  • 2022-10-19
  • 1970-01-01
  • 2016-07-13
  • 1970-01-01
  • 1970-01-01
  • 2011-02-13
  • 1970-01-01
  • 2021-06-02
相关资源
最近更新 更多