Нет встроенного способа сделать это - и все подходы, которые проверяют файл mtime, описанный здесь в других ответах, неверны .Единственным надежным вариантом является добавление триггеров в каждую таблицу, которые записывают изменения в одной таблице истории изменений, что ужасно неэффективно и не может быть выполнено задним числом.
Если вы заботитесь только об «используемой базе данных»vs «база данных не используется», вы можете собирать эту информацию из файлов журнала базы данных в формате CSV.Обнаружение «модифицированного» и «не модифицированного» намного сложнее;рассмотрим SELECT writes_to_some_table(...)
.
Если вам не нужно обнаруживать старую активность, вы можете использовать pg_stat_database
, которая записывает активность с момента последнего сброса статистики .Например:
-[ RECORD 6 ]--+------------------------------
datid | 51160
datname | regress
numbackends | 0
xact_commit | 54224
xact_rollback | 157
blks_read | 2591
blks_hit | 1592931
tup_returned | 26658392
tup_fetched | 327541
tup_inserted | 1664
tup_updated | 1371
tup_deleted | 246
conflicts | 0
temp_files | 0
temp_bytes | 0
deadlocks | 0
blk_read_time | 0
blk_write_time | 0
stats_reset | 2013-12-13 18:51:26.650521+08
, так что я могу видеть, что было активность в этой БД с момента последнего сброса статистики.Однако я ничего не знаю о том, что произошло до сброса статистики, поэтому, если бы у меня была БД, показывающая нулевую активность после сброса статистики полчаса назад, я бы не знал ничего полезного.