Sim, é possível limpar o cache postgres de buffers compartilhados E o cache do sistema operacional. A solução abaixo é para Windows ... outros já deram a solução para Linux.
Como muitas pessoas já disseram, para limpar os buffers compartilhados basta reiniciar o Postgres (não é necessário reiniciar o servidor). Mas apenas fazer isso não limpará o cache do sistema operacional.
Para limpar o cache do sistema operacional usado pelo Postgres, após interromper o serviço, use o excelente RamMap ( https://technet.microsoft.com/en-us/sysinternals/rammap ), do excelente Sysinternals Suite. Depois de executar o RamMap, clique em "Esvaziar" -> "Lista de espera vazia" no menu principal.
Reinicie o Postgres e você verá agora que sua próxima consulta será muito lenta devido à falta de cache.
Você também pode executar o RamMap sem fechar o Postgres, e provavelmente terá os resultados "sem cache" que deseja, visto que, como as pessoas já disseram, os buffers compartilhados geralmente dão pouco impacto em comparação com o cache do sistema operacional. Mas, para um teste confiável, prefiro parar o postgres antes de limpar o cache do sistema operacional para ter certeza.
Nota: AFAIK, não recomendo limpar as outras coisas além da "Lista de espera" ao usar o RamMap, porque os outros dados estão de alguma forma sendo usados e você pode causar problemas / dados perdidos se fizer isso. Lembre-se de que você está limpando a memória usada não apenas pelos arquivos do postgres, mas também por qualquer outro aplicativo e sistema operacional.
Atenciosamente, Thiago L.