Although it seems that the "1 table per hold" model is more scalable, it actually entails a deeper problem.
With the model "1 table for many wineries" you only need an additional field "bodega_id", and a winery table with its ID. Between them, a foreign key ensures that there are no records without a warehouse, and that eliminating a warehouse eliminates its contents.
With the model of many tables, you have to store in which table goes each hold. This means that a field represents a table . That relationship of entities does not exist. It would be like doing an FK to the information_schema of the BBDD. There are no database engines where you can make this reference , which means that your database can not have referential integrity between your entities.
You will have to write the code, in your business layer, to create and drop tables according to the insertions and deletions in the winery table, and that is never as good as using the built-in behavior of a relational engine.
PS: In the PostgreSQL engine you can make the field that contains the name of the table of each warehouse change if you rename the table, using the data type RegClass
but that is like all the help that is going to you give the engine to do the schema you're thinking.