We are getting ready to install in production and would like to know what are key considerations and how do we use them to provision VMs for the same?
It is going to be highly dependent on how the database is used. If you have a terabyte of data, but most of it is (almost) never accessed and you have just one process inserting data, vs wanting to support thousands of concurrent users with a mixture of small transaction queries and also huge reporting queries off the same database... You might need 4 core and 16GB of ram, or you might need 48 cores and 512GB of ram with very fast storage. There are not hard and fast rules, or even clear guidelines that I am aware of. If you expect to deal with many users, you will likely want a connection pooler, whether bundled with your software that accesses the database, or something like pgpool or pg bouncer.