GBase 8s
适配迁移
问答
django manage.py migrate 报索引已存在错误,有人遇到过吗?
发表于2025-11-06 13:40:3172次浏览12个评论
为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【GBase版本】: GBase8sV8.8_3.6.3_3X2_x86_64
【操作系统】:
【CPU】:
【问题描述】*:
将执行的sql打印了,migrate执行到这个命令报错:
CREATE INDEX auth_group_permissions_group_id_b120cbf9 ON auth_group_permissions (group_id)


重新drop database,create database, 重启gbase后,报错还是一样
评论
登录后才可以发表评论
路路路发表于 8个月前
稍等
hugolin发表于 8个月前
看下表结构,group_id是不是主键来的?
飞影发表于 8个月前
@hugolin:在django中打印的sql是:CREATE TABLE auth_group_permissions (id serial NOT NULL PRIMARY KEY, group_id integer NOT NULL, permission_id integer NOT NULL)


飞影发表于 8个月前
@hugolin:django中打印的sql是: CREATE TABLE auth_group_permissions (id serial NOT NULL PRIMARY KEY, group_id integer NOT NULL, permission_id integer NOT NULL)
飞影发表于 8个月前
完整日志:
Applying auth.0001_initial...CREATE TABLE auth_permission (id serial NOT NULL PRIMARY KEY, name varchar(50) NOT NULL, content_type_id integer NOT NULL, codename varchar(100) NOT NULL)
CREATE TABLE auth_group (id serial NOT NULL PRIMARY KEY, name varchar(80) NOT NULL UNIQUE)
CREATE TABLE auth_group_permissions (id serial NOT NULL PRIMARY KEY, group_id integer NOT NULL, permission_id integer NOT NULL)
CREATE TABLE auth_user (id serial NOT NULL PRIMARY KEY, password varchar(128) NOT NULL, last_login datetime year to fraction(5) NOT NULL, is_superuser boolean NOT NULL, username varchar(30) NOT NULL UNIQUE, first_name varchar(30) NOT NULL, last_name varchar(30) NOT NULL, email varchar(75) NOT NULL, is_staff boolean NOT NULL, is_active boolean NOT NULL, date_joined datetime year to fraction(5) NOT NULL)
CREATE TABLE auth_user_groups (id serial NOT NULL PRIMARY KEY, user_id integer NOT NULL, group_id integer NOT NULL)
CREATE TABLE auth_user_user_permissions (id serial NOT NULL PRIMARY KEY, user_id integer NOT NULL, permission_id integer NOT NULL)
ALTER TABLE auth_permission ADD CONSTRAINT FOREIGN KEY (content_type_id) REFERENCES django_content_type (id) ON DELETE CASCADE CONSTRAINT auth_permission_content_type_id_2f476e4b_fk_django_content_type_id
ALTER TABLE auth_permission ADD CONSTRAINT UNIQUE (content_type_id, codename) CONSTRAINT auth_permission_content_type_id_codename_01ab375a_uniq
CREATE INDEX auth_permission_content_type_id_2f476e4b ON auth_permission (content_type_id)
ALTER TABLE auth_group_permissions ADD CONSTRAINT FOREIGN KEY (group_id) REFERENCES auth_group (id) ON DELETE CASCADE CONSTRAINT auth_group_permissions_group_id_b120cbf9_fk_auth_group_id
ALTER TABLE auth_group_permissions ADD CONSTRAINT FOREIGN KEY (permission_id) REFERENCES auth_permission (id) ON DELETE CASCADE CONSTRAINT auth_group_permissions_permission_id_84c5c92e_fk_auth_permission_id
ALTER TABLE auth_group_permissions ADD CONSTRAINT UNIQUE (group_id, permission_id) CONSTRAINT auth_group_permissions_group_id_permission_id_0cd325b0_uniq
CREATE INDEX auth_group_permissions_group_id_b120cbf9 ON auth_group_permissions (group_id)
Traceback (most recent call last):
File "/opt/django_gbase8s/lib/python3.5/site-packages/django/db/backends/utils.py", line 85, in _execute
return self.cursor.execute(sql, params)
File "/opt/django_gbase8s/lib/python3.5/site-packages/django_gbasedbtdb/base.py", line 458, in execute
return self.cursor.execute(sql, params)
pyodbc.Error: ('HY000', '[HY000] [GBasedbt][GBasedbt ODBC Driver][GBasedbt]Unspecified System Error = -350. (-350) (SQLExecDirectW)')
Applying auth.0001_initial...CREATE TABLE auth_permission (id serial NOT NULL PRIMARY KEY, name varchar(50) NOT NULL, content_type_id integer NOT NULL, codename varchar(100) NOT NULL)
CREATE TABLE auth_group (id serial NOT NULL PRIMARY KEY, name varchar(80) NOT NULL UNIQUE)
CREATE TABLE auth_group_permissions (id serial NOT NULL PRIMARY KEY, group_id integer NOT NULL, permission_id integer NOT NULL)
CREATE TABLE auth_user (id serial NOT NULL PRIMARY KEY, password varchar(128) NOT NULL, last_login datetime year to fraction(5) NOT NULL, is_superuser boolean NOT NULL, username varchar(30) NOT NULL UNIQUE, first_name varchar(30) NOT NULL, last_name varchar(30) NOT NULL, email varchar(75) NOT NULL, is_staff boolean NOT NULL, is_active boolean NOT NULL, date_joined datetime year to fraction(5) NOT NULL)
CREATE TABLE auth_user_groups (id serial NOT NULL PRIMARY KEY, user_id integer NOT NULL, group_id integer NOT NULL)
CREATE TABLE auth_user_user_permissions (id serial NOT NULL PRIMARY KEY, user_id integer NOT NULL, permission_id integer NOT NULL)
ALTER TABLE auth_permission ADD CONSTRAINT FOREIGN KEY (content_type_id) REFERENCES django_content_type (id) ON DELETE CASCADE CONSTRAINT auth_permission_content_type_id_2f476e4b_fk_django_content_type_id
ALTER TABLE auth_permission ADD CONSTRAINT UNIQUE (content_type_id, codename) CONSTRAINT auth_permission_content_type_id_codename_01ab375a_uniq
CREATE INDEX auth_permission_content_type_id_2f476e4b ON auth_permission (content_type_id)
ALTER TABLE auth_group_permissions ADD CONSTRAINT FOREIGN KEY (group_id) REFERENCES auth_group (id) ON DELETE CASCADE CONSTRAINT auth_group_permissions_group_id_b120cbf9_fk_auth_group_id
ALTER TABLE auth_group_permissions ADD CONSTRAINT FOREIGN KEY (permission_id) REFERENCES auth_permission (id) ON DELETE CASCADE CONSTRAINT auth_group_permissions_permission_id_84c5c92e_fk_auth_permission_id
ALTER TABLE auth_group_permissions ADD CONSTRAINT UNIQUE (group_id, permission_id) CONSTRAINT auth_group_permissions_group_id_permission_id_0cd325b0_uniq
CREATE INDEX auth_group_permissions_group_id_b120cbf9 ON auth_group_permissions (group_id)
Traceback (most recent call last):
File "/opt/django_gbase8s/lib/python3.5/site-packages/django/db/backends/utils.py", line 85, in _execute
return self.cursor.execute(sql, params)
File "/opt/django_gbase8s/lib/python3.5/site-packages/django_gbasedbtdb/base.py", line 458, in execute
return self.cursor.execute(sql, params)
pyodbc.Error: ('HY000', '[HY000] [GBasedbt][GBasedbt ODBC Driver][GBasedbt]Unspecified System Error = -350. (-350) (SQLExecDirectW)')
liaosnet发表于 8个月前
@飞影:ALTER TABLE auth_group_permissions ADD CONSTRAINT FOREIGN KEY (group_id) REFERENCES auth_group (id) ON DELETE CASCADE CONSTRAINT auth_group_permissions_group_id_b120cbf9_fk_auth_group_id
创建外键约束时会自动创建索引。。
创建外键约束时会自动创建索引。。
飞影发表于 8个月前
@liaosnet:看攻略https://www.gbase.cn/community/post/199, 那这个django是怎么玩的。。。用的django2.1.5 , django-gbasedbtdb==1.7.0。。。
冰凤发表于 8个月前
学习一下
飞影发表于 8个月前
粗暴的解决,跳过索引已存在错误(理论上已存在不需要在创建)。
源码中修改。。。
然后就可以继续了。。。
python3 manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying sessions.0001_initial... OK

源码中修改。。。
然后就可以继续了。。。
python3 manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying sessions.0001_initial... OK

枫溪发表于 8个月前
学习下
飞影发表于 8个月前
粗暴的解决方法,在源码中跳过这个错误(理论上已存在的索引,不需要在重复创建):
django_gbase8s/lib/python3.5/site-packages/django_gbasedbtdb/base.py 修改如下:
def execute(self, sql, params=None):
self.last_sql = sql
sql = self.format_sql(sql, params)
params = self.format_params(params)
self.last_params = params
# TODO 2025-11 change
# print(sql)
# if 'CREATE INDEX auth_' in sql:
# return
# if 'CREATE INDEX django_' in sql:
# return
try:
result = self.cursor.execute(sql, params)
except Exception as e:
result = None
if """Unspecified System Error = -350.""" in str(e):
return
return result
# return self.cursor.execute(sql, params)
重新执行:
python3.5 manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying sessions.0001_initial... OK
django_gbase8s/lib/python3.5/site-packages/django_gbasedbtdb/base.py 修改如下:
def execute(self, sql, params=None):
self.last_sql = sql
sql = self.format_sql(sql, params)
params = self.format_params(params)
self.last_params = params
# TODO 2025-11 change
# print(sql)
# if 'CREATE INDEX auth_' in sql:
# return
# if 'CREATE INDEX django_' in sql:
# return
try:
result = self.cursor.execute(sql, params)
except Exception as e:
result = None
if """Unspecified System Error = -350.""" in str(e):
return
return result
# return self.cursor.execute(sql, params)
重新执行:
python3.5 manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying sessions.0001_initial... OK
liaosnet发表于 8个月前
@飞影:点赞~
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25044
- 42023-09-25浏览数:18519
- 52020-05-11浏览数:17526