The other question I had was , are there any pg_* views using which, we are able to see which session/connection is using the highest amount of memory? I don't see any such columns in pg_stats_activity
From a purely postgresql database point of view, this feature is being developed, you can view it here : PostgreSQL: Enhancing Memory Context Statistics Reporting Basically, this lets you provide the pid of any PostgreSQL process to an sql function, which then returns its memory usage statistics. Once this feature is committed, for obtaining memory usage statistics of any postgresql session you would need to run SELECT pg_backend_pid() which will give you the pid of the postgresql backend. You can then pass it to SELECT pg_get_process_memory_contexts(pid, ..), which will return the memory consumption data. This is for future reference.
At the moment, you can use the following function on the connection whose memory you wish to inspect. This works only for local connection i.e you can't use this function to query the statistics of any other postgresql process or connection. PostgreSQL: Documentation: 18: 53.5. pg_backend_memory_contexts