2

我想将以下 postgreSQL 查询结果存储在一个变量中。我在 shell 脚本上写命令。

psql -p $port -c "select pg_relation_size ('tableName')" postgres

我需要变量来将结果保存在文件中。我已经尝试过,但它不起作用

var= 'psql -p $port -c "select pg_relation_size ('tableName')" '
4

2 回答 2

4

使用HERE document类似的外壳:

#!/bin/sh
COUNT=`psql -A -t -q -U username mydb << THE_END
SELECT count (DISTINCT topic_id) AS the_count
FROM react
THE_END`

echo COUNT=${COUNT}
  • 整个psql <<the_end ... stuff here ... the_end语句都包含在反引号中
  • 反引号内语句的执行输出用作COUNTshell 变量的值
  • 需要 -A -t -q 来抑制列标题和错误输出
  • 在此处的文档中,shell 变量替换有效,即使在单引号中!

所以,你甚至可以这样做:

#!/bin/sh

DB_NAME="my_db"
USR_NAME="my_name"
TBL_NAME="my_table"
COL_NAME="my_column"

COUNT=`psql -A -t -q -U ${USR_NAME} ${DB_NAME} << THE_END
SELECT COUNT(DISTINCT ${COL_NAME} ) AS the_count
FROM ${TBL_NAME}
THE_END`

echo COUNT=${COUNT}
于 2013-09-27T08:26:04.810 回答
2

要运行内联查询,您必须用重音而不是单引号将其包装起来:

 $ vim `which fancyexecfileinpath`

psql 允许您从命令行运行查询,但我想您应该输入完整的信息。您可能缺少数据库名称。

postgres@slovenia:~$ psql -d mydbname -c "select * from applications_application;" 
postgres@slovenia:~$ specialvar=`psql -d flango -c "select * from     applications_application;"`
postgres@slovenia:~$ echo $specialvar
id | name | entities | folder | def_lang_id | ... | 2013-07-09 15:16:57.33656+02 | /img/app3.png (1 row)
postgres@slovenia:~$ 

将其分配给时请注意重音符号,specialvar 否则您会将其设置为字符串。变量和等号(“=”)和值( http://genepath.med.harvard.edu/mw/Bash:HOW_TO:_Set_an_environment_variable_in_the_bash_shell)之间不应有任何空格

于 2013-09-27T06:02:11.907 回答