我需要从bash/expect脚本执行以下sql查询--从bash脚本运行这些查询的首选方法是什么
# 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,我们可以这样做
psql ambari -U ambari
Password for user ambari:bigdata当我们运行这个( /tmp/file,包括查询的bach )
psql -U ambari -f /tmp/file ambari我们会得到
psql: FATAL: no pg_hba.conf entry for host "[local]", user "ambari", database "ambari", SSL off发布于 2020-03-12 06:37:25
我在用这个
dbhost=localhost
dbport=5432
dbuser=user
dbpass=pass
dbname=test
export PGPASSWORD="$dbpass"
dbopts="-h $dbhost -p $dbport -U $dbuser -d $dbname"然后从文件中运行sql脚本。
psql $dbopts < "$path_to_sql_script"或来自查询var
query="
SELECT 1;
...
"
psql $dbopts <<< "$query"另外,pgpass也可以设置在特殊文件~/.pgpass中,如下所示
echo "$dbhost:$dbport:$dbname:$dbname:$dbpass" > ~/.pgpass
chmod 600 ~/.pgpass发布于 2020-03-12 06:21:53
使用开关-c command或-f filename,即:
$ psql -U ambari -c "SELECT ... ;" ambari # > result.file或者:
$ cat file.sql
SELECT
... ;
$ psql -U ambari -f file.sql ambari # > result.file可能是-f,因为您的查询似乎很长。使用> result.file将查询结果存储到文件中。
至于密码,在用户的home dir中存储以下类型的.pgpass文件条目:
$ cat >> ~/.pgpass
#hostname:port:database:username:password
localhost:5432:ambari:ambari:t00M4NY53CR3t5并将其权利仅限于用户的眼睛:
$ chmod 600 ~/.pgpass另外,如果数据库不在localhost中运行,请考虑psql -h hostname (这也需要在.pgpass条目中反映)。
https://stackoverflow.com/questions/60648446
复制相似问题