【问题标题】:Execute sql queries from shell script从 shell 脚本执行 sql 查询
【发布时间】:2020-06-24 04:04:42
【问题描述】:

我需要从 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

【问题讨论】:

    标签: sql bash postgresql psql


    【解决方案1】:

    我在用这个

    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"
    

    或来自查询变量

    query="
    SELECT 1;
    ...
    "
    psql $dbopts <<< "$query"
    

    也可以像这样在特殊文件~/.pgpass中设置pgpass

    echo "$dbhost:$dbport:$dbname:$dbname:$dbpass" > ~/.pgpass
    chmod 600 ~/.pgpass
    

    【讨论】:

    • 如何知道-dbport?
    • 使用默认 5432。
    • 在哪里可以找到 - dbname?
    【解决方案2】:

    使用开关-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,因为您的查询似乎很长。使用&gt; result.file将查询结果保存到文件中。

    至于密码,将以下条目存储到用户主目录中的.pgpass 文件中:

    $ cat >> ~/.pgpass
    #hostname:port:database:username:password
    localhost:5432:ambari:ambari:t00M4NY53CR3t5
    

    并将其权限仅设置为用户的眼睛:

    $ chmod 600 ~/.pgpass
    

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

    【讨论】:

    • 请看更新,我们按照您的建议运行,但我认为我们还需要考虑密码
    • 更新了密码处理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 2013-01-18
    • 2021-12-11
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    相关资源
    最近更新 更多