如何在postgres中使用shell脚本触发VACUUM命令

时间:2015-07-08 07:08:38

标签: shell psql

这是我的shell脚本

    #!/bin/bash
    psql --host=127.0.0.1 --port=5432 --dbname=SIEM --username=dbauser
    vacuumdb --analyze --verbose --table 'vuln' SIEM

但它的工作不正常并给出错误:

   linux-lxh4:/home/gaurav # ./script.sh 
   psql (9.2.5)
   Type "help" for help.

   SIEM=# \q
   vacuumdb: could not connect to database root: FATAL:  Peer authentication failed for user "root"

Edit1:我使用了这段代码:

   psql --host=127.0.0.1 --port=5432 --dbname=SIEM --username=dbauser
   VACUUM FULL VERBOSE vuln 

这是错误:

   ./script.sh: line 4: VACUUM: command not found

3 个答案:

答案 0 :(得分:5)

来自Postgres VACUUM documentation

管理命令名为vacuum而不是vacuumdb

我这里没有psql,但它应该是

#!/bin/bash
psql --host=127.0.0.1 --port=5432 --dbname=SIEM --username=dbauser
-c 'VACUUM VERBOSE ANALYZE vuln'

答案 1 :(得分:3)

如果您以后运行vacuumdb,则无需使用psql连接到Postgres。而是使用以下内容:

public class Test
{
    private Tech tech = null;

    ...

    public Tech GetExpectedTech(string condition)
    {
        ...

        return tech;
    }
}

(或者在另一个答案中提到,您可以在使用psql连接后使用VACUUM SQL命令。语法不同,不使用“--xxxx”选项)

答案 2 :(得分:2)

我们在OLA中使用的bash脚本用于清空reportdb。

                     #!/bin/sh
                     dbname="reportsdb_new"
                     username="postgres"
                     psql $dbname $username << EOF
                     vacuum FULL VERBOSE ANALYZE ;
                     reindex database reportsdb_new ;
                     EOF