I have a python script on postgresql database which is fetching records from sql server database and inserting it to postgresql DB after some filtering. this jobs is running by cron
every two minutes. I want to know when there is maintenance job such as autovacuum
is running and if running forget fetching records. Is it possible to detect in python?
-
3Don't bother. There is no problem inserting into the table at the same time as vacuum is running.– user1822Commented May 7, 2012 at 12:04
1 Answer
In current versions of PostgreSQL, you can look at the *pg_stat_activity* view to find autovacuum tasks. They will have *current_query* fields that start with "Mark autovacuum entries in pg_stat_activity that look like this:
autovacuum: VACUUM t
A query to count how many of those you have might look like this:
SELECT count(*) FROM pg_stat_activity WHERE position('autovacuum:' IN current_query) = 1;
And you can have your Python code check if the value returned is >0; if so, autovacuum is running. You might want to track down and avoid running concurrently with manual VACUUM calls, too.