我在多租户 Flask 应用程序中使用 Sqlalchemy,并且需要在添加新租户时动态创建表。我一直在使用 Table.create 在新的 Postgres 模式中创建单独的表(以及 search_path 修改),并且效果很好。
我发现的限制是,如果当前事务中有任何待处理,Table.create 方法会阻塞。我必须在 .create 调用之前提交事务,否则它会阻塞。它似乎没有在 Sqlalchemy 中被阻止,因为您不能 Ctrl-C 它。您必须终止该进程。所以,我假设它在 Postgres 中更进一步。
我在其他答案中读到 CREATE TABLE 是事务性的并且可以回滚,所以我认为这应该可以工作。我尝试使用当前引擎启动新事务并将其用于表创建(与当前的 Flask 相比),但这也无济于事。
有谁知道如何在没有早期提交的情况下让它工作(并且冒着部分悬空数据的风险)?
这是 Python 2.7、Postgres 9.1 和 Sqlalchemy 0.8.0b2。