灰飞烟灭
#1
【 使用环境 】生产环境
【 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)
序风
#5
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 个赞
鱼干
#6
一条语句含有两个ddl,可以拆来来执行,估计ob还不支持这种写法
灰飞烟灭
#7
好的,了解了。因为这个是django做迁移时自动生成的语句,并且在oracle,mysql、PG都能正常执行的。希望后面的版本能够增加这样的支持。
1 个赞
遇到了同样的问题,目前通过禁用 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 个赞