I've read a recipe that used Postgres table inheritance to achieve sharding in a way it's mostly transparent to the client. The blog post read like a conversation between two people. Unfortunately I'm not finding the link anymore.
How do you decide to put as sharding-key? Something like 'user_id'. What if a user becomes too big? Something like id=uuid. Then you lose the semi-free user_id index.
I believe the holy-grail of sharding is range-based (bigtable, hbase, hypertable etc).
I believe the holy-grail of sharding is range-based (bigtable, hbase, hypertable etc).