4.2版本,在django框架下做迁移,在pg和mysql下都能正常执行这条语句,但是OB不行。

【 使用环境 】生产环境
【 OB or 其他组件 】Django框架下做migration
【 使用版本 】4.2.2 社区版
【问题描述】】Django框架下做migration,生成的执行语句,在mysql和PG数据库上都能正常执行,但是在ob上就会报错。语句如下:ALTER TABLE erp_cangku_hc ADD COLUMN ck_id_test integer DEFAULT 1 NOT NULL , ADD CONSTRAINT erp_cangku_hc_ck_id_b0ed2312_fk_erp_cangku_id_test FOREIGN KEY (ck_id_test) REFERENCES erp_cangku(id)

【复现路径】问题出现前后相关操作
【附件及日志】表结果如下 :
erp_cangku_hc.zip (1.1 KB)

我先验证一下

erp_cangku的表结构也麻烦提供一下?

OB暂时不支持复合DDL语句,这个DDL变更是两个,如果你拆开单独执行的话是可以的。
ALTER TABLE erp_cangku_hc ADD COLUMN ck_id_test integer DEFAULT 1 NOT NULL , ADD CONSTRAINT erp_cangku_hc_ck_id_b0ed2312_fk_erp_cangku_id_test FOREIGN KEY (ck_id_test ) REFERENCES erp_cangku (id )

1 个赞

一条语句含有两个ddl,可以拆来来执行,估计ob还不支持这种写法

好的,了解了。因为这个是django做迁移时自动生成的语句,并且在oracle,mysql、PG都能正常执行的。希望后面的版本能够增加这样的支持。

1 个赞

可以在github里给我们提个issue的需求吗

好的,可以的。

遇到了同样的问题,目前通过禁用 django orm 层中当前数据库对复合外键语句的支持,使得django数据库迁移能够正常执行。

class CommonConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'common'

    def ready(self):
        # 不允许 migrate 迁移时将 外键的创建 与 建表语句 合并成一条(OceanBase 目前不支持)
        from django.db.backends.mysql.schema import DatabaseSchemaEditor
        DatabaseSchemaEditor.sql_create_column_inline_fk = None

不过还是希望OB社区大佬们能够早日使复合DDL的功能实现~

1 个赞