Я согласен, что не рекомендуется создавать таблицы динамически, но это выполнимо.
Лично я бы поступил так, как предложил Аксель Фонтейн, но если вам нужны динамические таблицы, я бы подумал об использовании Partitioning .
PostgreSQL позволяет вам создавать основную таблицу и несколько дочерних таблиц (разделов), записи между дочерними таблицами являются дизъюнктивными, но каждая запись из любой дочерней таблицы видна в родительской таблице. Это означает, что вы можете вставлять строки в любую дочернюю таблицу, которую хотите, используя простой оператор вставки (это не круто , но имеет тот же уровень сложности, что и составление и сохранение сущности, так что это приемлемо в вашем случае) и запрос базы данных с использованием HQL