注册

django-dmPython = 3.1.7在查询同表名的约束时无法区分schema

clouderman 2024/05/21 546 4 已解决

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:
【操作系统】:
【CPU】:
【问题描述】*:
django-dmPython = "==3.1.7"
dmPython = "==2.5.5"
在执行python manage.py migrate时,以下sql执行报错:

ALTER TABLE /*+ALTER_TAB_COMMIT(0)*/ "DJANGO_ADMIN_LOG" DISABLE CONSTRAINT "DJANGO_ADMIN_LOG_USER_ID_C564EBA6_FK_ACCOUNT_BKUSER_ID";

image.png

但是指定schema下的DJANGO_ADMIN_LOG表并不需要DJANGO_ADMIN_LOG_USER_ID_C564EBA6_FK_ACCOUNT_BKUSER_ID这个约束,但还是报错了。
排查django-dmPython代码,在django-dmPython/operations.py:434中,有获取表的约束列表:
image.png
可以看到,官方提供的库中,执行的sql没有指定OWNER(schema),而是查询了所有table_name为DJANGO_ADMIN_LOG的约束。
同时在django-dmPython/base.py:263中,生成alter的sql时,没有区分OWNER,而是对所有查询出来的约束名进行了ALTER:
image.png

此时如果有多个schema存在同样名为DJANGO_ADMIN_LOG的表,那所有table_name为DJANGO_ADMIN_LOG的约束都会查询出来,但是并不是所有的schema都有创建所查询出来的这些约束名,导致提示无效的约束名。
例如我的环境中,有些scheme的DJANGO_ADMIN_LOG的约束名为DJANGO_ADMIN_LOG_USER_ID_C564EBA6_FK_AUTH_USER_ID,有些是DJANGO_ADMIN_LOG_USER_ID_C564EBA6_FK_ACCOUNT_BKUSER_ID
image.png
此时我在schema为svc_rabbitmq中执行时,因为django-dmPython以上原因拿到了tencent_paas.DJANGO_ADMIN_LOG的DJANGO_ADMIN_LOG_USER_ID_C564EBA6_FK_ACCOUNT_BKUSER_ID的约束名,但svc_rabbitmq.DJANGO_ADMIN_LOG并没有这个约束名 从而引起异常。

回答 0
暂无回答
扫一扫
联系客服