我可以编写每月postgres维护的脚本吗?

时间:2016-04-29 19:42:36

标签: postgresql

我必须对postgres数据库执行每月维护。
我进入系统,导航到数据库,然后在40个不同的表上运行3个命令:

CLUSTER [table1] USING [primarykey];
ANALYZE [table1];
REINDEX TABLE [table1];

我必须等待每个命令完成执行才能运行下一个命令(即CLUSTER,等待几分钟 - ,ANALYZE -wait-,REINDEX -wait-,)

这很简单,但是我需要大约30-45分钟来复制和粘贴120行,一次一行...有没有办法自动化这个过程?
我没有使用脚本的经验,我对postgreSQL知之甚少。

我的问题有点独特,因为我无法在postgreSQL数据库中安装任何东西。我希望将此脚本本地化在我的计算机上,然后能够在维护时运行它。

1 个答案:

答案 0 :(得分:0)

  1. 群集自动重新索引表格。在对表进行聚类后,没有理由立即重新索引表。
  2. 你真的需要这样做吗?您是否有证据表明您的表需要群集?或者你只是假设他们这样做是因为你从互联网上读到的东西,指的是一个十年前版本的PostgreSQL,由一个不知道他们在谈论什么的人写的?你真的可以从中受益。你不会这样做更有可能,这只是浪费时间。
  3. 如果您对脚本没有任何了解,那么您需要了解有关脚本的知识。您可能应该将您的帖子标记为关于脚本编写,无论您希望使用哪种shell /语言。
  4. 在核心部分,您所要做的就是编写一系列要从命令行执行的命令,并将它们推送到文本文件中。最简单的方法是在本地计算机上安装psql,如果它还没有。

    psql -c 'cluster foobar' -h thehost.example.com
    psql -c 'analyze foobar' -h thehost.example.com
    

    您可能需要进行一些配置才能使此连接与您所使用的任何身份验证方法一起工作,但不知道哪种身份验证方法无法进一步评论。

    如果群集由于某种原因失败,则没有理由继续尝试分析它。 (但这样做也没有什么害处)。如果你想微调这种情况,可以采用多种方法来实现,具体取决于你编写脚本的shell以及你想要它做什么。