Postgres 和 alembic - 假设 SERIAL 序列
Posted
技术标签:
【中文标题】Postgres 和 alembic - 假设 SERIAL 序列【英文标题】:Postgres and alembic - Assuming SERIAL sequence 【发布时间】:2019-11-16 14:32:36 【问题描述】:我有一个 postgres 数据库,我通过 SQLAlchemy 和 alembic(用于迁移)进行管理。通过 alembic 创建数据库迁移时,我在控制台中收到以下信息。
INFO [alembic.ddl.postgresql] Detected sequence named 'my_table_name_id_seq' as owned by integer column 'my_table_name(id)', assuming SERIAL and omitting
我的模型看起来像
class CopyJob(db.Model):
__tablename__ = "my_table_name"
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
我将上述内容解释为警告。为我的每个表生成一行。我有两个问题:
收到上述警告时我做错了什么 我应该修复/明确设置什么,以使其消失。迁移过于冗长。谢谢!
【问题讨论】:
您已将 Alembic 日志记录级别设置为 INFO。所以,这甚至不是警告。这只是信息。如果您不想看到 INFO 行,请将您的日志记录级别更改为 WARN。它可能在 alembic.ini 配置文件的 logger_alembic 部分中。 alembic.sqlalchemy.org/en/latest/… 这是一种可能性,但我更喜欢保持 INFO 日志记录级别并仅处理这些特定行。你认为这可能吗? 您应该可以使用 logging.Filter (docs.python.org/2/library/logging.html#filter-objects) 来完成。但是假设您使用命令行 alembic 脚本来启动 alembic,将过滤器添加到其日志记录处理程序中,您将无法通过配置来完成。 logging.config.fileConfig 不支持过滤器,这是 alembic 正在使用的。您需要以编程方式启动 alembic,以便您可以自己设置记录器。另一种选择是修补 PostgresqlImpl.autogen_col_reflect 方法中的日志调用。 【参考方案1】:在深入研究 alembic 代码后,它看起来不像是警告。 Alembic 只是通知它检查的序列结果是一个 SERIAL。因此,试图以某种方式解决问题是没有意义的。如果该消息困扰您,您可以按照 cmets 中的建议将日志级别提高到 WARNING,否则,似乎没有解决方法。
【讨论】:
这说明会发生什么...当您将 serial 作为列类型时,PG 创建整数列,序列名为 - table_column_seq - 并将 table 标记为序列的所有者。可能开发人员决定通过向您展示它来稍微灵活一点......;)以上是关于Postgres 和 alembic - 假设 SERIAL 序列的主要内容,如果未能解决你的问题,请参考以下文章