我有几个 PostgreSQL 表 (9.1),经常插入/删除。尽管配置了自动清理并定期运行,但随着时间的推移,它们会遭受索引膨胀的困扰。
我正在考虑让这些表上的 REINDEX 自动化。没有人会实际访问数据库,因为软件将安装在客户端,而且实际上应该运行多年。
我一直在阅读有关“cron jobs”的文章,但我缺少一些关于如何最好地设置它的指南或教程,特别是在 Windows 环境中。
有人能给我指出正确的方向吗?欢迎提出其他建议,但主要要求是它不需要任何手动操作。
答案1
答案2
以下是我的看法: - 确保已安装 pgAgent - 我花了一些时间搜索,但找不到适用于 Postgres 9.1 的 Windows 上的 pgAgent 用户界面。显然,早期版本中存在一些 - 但为此我必须手动编写一些 SQL
SET search_path = pgagent;
INSERT INTO pga_jobclass VALUES (6, 'Scheduled Tasks');
INSERT INTO pga_job VALUES (5, 6, 'TableReindex', 'Reindex tables', '', true,
'2013-03-07 10:00:00.000+11', --date created
'2013-03-07 10:00:00.000+11', --date changed
NULL, NULL, NULL);
INSERT INTO pga_schedule VALUES (3, 5, 'TableReindexSchedule', 'Reindex tables',
true, --enabled
'2013-03-07 10:00:00.000+11', --start date
NULL, --end (never)
'{t,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f}', --minutes: 't' for run on the first minute of an hour
'{t,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f}', --hours: 't' to run at 3 AM
'{f,f,f,f,f,f,f}', -- weekdays: don't care, all false
'{t,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f}', -- monthdays: 't' to run on the first day
'{t,t,t,t,t,t,t,t,t,t,t,t}'); -- months: all true to run on the first day on each month
INSERT INTO pga_jobstep VALUES (5, 5, 'TableReindexInfo', '', true, 's', 'REINDEX TABLE mytable1;REINDEX TABLE mytable2;', '', '@@DATABASE_NAME@@', 'f', NULL);
作为检查,运行脚本后,pga_job 表中的 jobnextrun 设置为“2013-04-01 03:00:00+11”。