好吧,我已经搬到一家新公司,我看到他们有一个PostgreSQL数据库在这里运行OpenNMS。
我是一个MySQL人员,对PostgreSQL并不熟悉,但是我至less学会了如何运行psql和postgres -D来进入单用户模式。
无论如何,OpenNMS崩溃了。 我进来并跟踪到PostgreSQL给出这个错误:
WARNING: database "template1" must be vacuumed within 965550 transactions HINT: To avoid a database shutdown, execute a full-database VACUUM in "template1".
它实际上是从100万开始,我可以看到965500。 通过login单个用户( postgres -D )并运行真空,我已经到了这postgres -D 。 现在我期望这个清理它,但结果正好是55行:
WARNING: database "template1" must be vacuumed within 938861 transactions HINT: To avid a database shutdown, execute a full-database VACUUM in "template1". WARNING: database "template1" must be vacuumed within 938860 transactions HINT: To avoid a database shutdown, execute a full-database VACUUM in "template1". WARNING: database "template1" must be vacuumed within 938861 transactions HINT: To avoid a database shutdown, execute a full-database VACUUM in "template1". WARNING: database "template1" must be vacuumed within 938860 transactions HINT: To avoid a database shutdown, execute a full-database VACUUM in "template1".
所以我的问题是,我只需要继续运行,直到我达到0或我做错了吗?
我之前遇到过这个问题。 以下是我如何解决它的笔记
你需要通过运行真空来解决这个问题,因为错误很方便。 为了做到这一点,首先closurespostgres sudo /sbin/service postgresql stop
现在,您需要查看每个数据库,并使用独立后端执行真空。 作为postgres用户运行: postgres -D /opt/pgsql/data/ postgres
其中/ opt / pgsql / data是postgres的数据目录的path,postgres是要修复的数据库的名称。
你会得到如下提示:
PostgreSQL独立后端8.1.18
后端>
只需在后端>提示符下inputVACUUM 。
现在,您将最有可能得到如下警告:数据库“template1”必须在999407个事务中被清除。提示:为避免数据库closures,请在“template1”中执行全数据库VACUUM。
只要不断重复这些步骤,每次更改DBNAME,直到您不再收到警告。 当发生这种情况时,你可以重新启动postgres,所有的都会正确的。
编辑:我也要提一下,在我们做了这个过程几次之后, 我们决定实施autovacuumstream程: http : //www.postgresql.org/docs/8.1/static/maintenance.html#AUTOVACUUM