例如,我有一个表存储值:
select * from myvalue;
val
-------
12345
(1 row)
Run Code Online (Sandbox Code Playgroud)
如何将其保存12345到postgresql或shell脚本中的变量中?
这是我在shell脚本中尝试的内容:
var=$(psql -h host -U user -d db <<SQLSTMT
SELECT * FROM myvalue;
SQLSTMT)
Run Code Online (Sandbox Code Playgroud)
但是echo $var给了我:
val ------- 12345 (1 row)
Run Code Online (Sandbox Code Playgroud)
我也试过了
\set var (select * from myvalue)
Run Code Online (Sandbox Code Playgroud)
在psql中,当我键入\set它时列出:
var = '(select*frommyvalue)'
Run Code Online (Sandbox Code Playgroud)
Pio*_*das 12
不不不!使用psql中的"原始数据"切换,如"-t"或"\ t",并将查询传递给psql而不是解析ascii-table,来吧:-)
echo 'select * from myvalue;' | psql -t -h host -U user -d db
Run Code Online (Sandbox Code Playgroud)
如果你真的需要解析psql输出,你也可以使用-H开关(打开HTML输出),并用一些perl模块解析它来解析html表,我用过一次或两次..另外,你可能想用一个pgpass文件和~/.psqlrc某些默认值,如默认DB连接,未指定时.
psql有一个-c/ --command=选项从命令行接受SQL,和-t/ --tuples-only选项来控制输出格式.
$ psql -c 'select 1+1'
?column?
----------
2
(1 row)
$ psql -t -c 'select 1+1'
2
$ VALUE=`psql -t -c 'select 1+1'`
$ echo $VALUE
2
Run Code Online (Sandbox Code Playgroud)