我想从 PHP 中清理一个 PostgreSQL 数据库。
我试过这个:
pg_query($conn,"vacuum analyse;");
我怎么知道这是否有效?
我想从 PHP 中清理一个 PostgreSQL 数据库。
我试过这个:
pg_query($conn,"vacuum analyse;");
我怎么知道这是否有效?
第一个问题:你为什么要做 VACUUM FULL?这没有意义。它实际上应该永远不会被调用。
第二:从 php(可能是网页)运行真空可能会出现问题。真空很容易花费 3 分钟以上,这是(如果我没记错的话)Web 请求的标准超时。
最好的解决方案是使用 autovacuum。如果您不能使用 autovacuum - 使用 cron 安排 Vacuumdb 调用。
在运行真空查询之前和之后运行此查询。如果真空之后的“年龄”比之前少,那么真空已经成功运行。
SELECT age(datfrozenxid) as age FROM pg_database where datname='your_db';
我相信它不会返回错误,它可能正在工作。这是有关真空的文档。
http://www.postgresql.org/docs/current/interactive/sql-vacuum.html
假设你的 Vacuum 运行超过几秒钟,你可以SELECT * FROM pg_stat_activity
在 postgres 客户端中运行 " " 来获取当前正在运行的查询列表。您的 VACUUM 查询应该显示在那里。