首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从shell脚本执行sql查询

从shell脚本执行sql查询
EN

Stack Overflow用户
提问于 2020-03-12 06:06:30
回答 2查看 1.6K关注 0票数 0

我需要从bash/expect脚本执行以下sql查询--从bash脚本运行这些查询的首选方法是什么

代码语言:javascript
运行
复制
# psql ambari -U ambari
Password for user ambari:
psql (9.2.24)
Type "help" for help.

ambari=>
ambari=>
ambari=>
ambari=> select
ambari-> sum(case when ulo = 1  then 1 else 0 end) as ulo_1,
ambari-> sum(case when ulo = 2  then 1 else 0 end) as ulo_2,

.
.
.

对于访问PostgreSQL,我们可以这样做

代码语言:javascript
运行
复制
psql ambari -U ambari
Password for user ambari:bigdata

当我们运行这个( /tmp/file,包括查询的bach )

代码语言:javascript
运行
复制
 psql -U ambari -f /tmp/file  ambari

我们会得到

代码语言:javascript
运行
复制
psql: FATAL:  no pg_hba.conf entry for host "[local]", user "ambari", database "ambari", SSL off
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-12 06:37:25

我在用这个

代码语言:javascript
运行
复制
dbhost=localhost
dbport=5432
dbuser=user
dbpass=pass
dbname=test
export PGPASSWORD="$dbpass"
dbopts="-h $dbhost -p $dbport -U $dbuser -d $dbname"

然后从文件中运行sql脚本。

代码语言:javascript
运行
复制
psql $dbopts < "$path_to_sql_script"

或来自查询var

代码语言:javascript
运行
复制
query="
SELECT 1;
...
"
psql $dbopts <<< "$query"

另外,pgpass也可以设置在特殊文件~/.pgpass中,如下所示

代码语言:javascript
运行
复制
echo "$dbhost:$dbport:$dbname:$dbname:$dbpass" > ~/.pgpass
chmod 600 ~/.pgpass
票数 1
EN

Stack Overflow用户

发布于 2020-03-12 06:21:53

使用开关-c command-f filename,即:

代码语言:javascript
运行
复制
$ psql -U ambari -c "SELECT ... ;" ambari    # > result.file

或者:

代码语言:javascript
运行
复制
$ cat file.sql
SELECT
... ;
$ psql -U ambari -f file.sql ambari          # > result.file

可能是-f,因为您的查询似乎很长。使用> result.file将查询结果存储到文件中。

至于密码,在用户的home dir中存储以下类型的.pgpass文件条目:

代码语言:javascript
运行
复制
$ cat >> ~/.pgpass
#hostname:port:database:username:password
localhost:5432:ambari:ambari:t00M4NY53CR3t5

并将其权利仅限于用户的眼睛:

代码语言:javascript
运行
复制
$ chmod 600 ~/.pgpass

另外,如果数据库不在localhost中运行,请考虑psql -h hostname (这也需要在.pgpass条目中反映)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60648446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档