django loaddata导致编程错误:“…”在postgresql中加载长表名时不是序列

django loaddata导致编程错误:“…”在postgresql中加载长表名时不是序列,django,Django,我正在使用manage.py loaddata将sqlite生成的fixture加载到postgresql数据库中。当加载到名称较长的ManyToManyField时,加载失败 我跟踪到数据库适配器:usr/local/lib/python2.6/dist-packages/django/db/backends/postgresql_psycopg2/base.py line 44 返回self.cursor.executequery,args 查询值正确:“选择当前值”\a\u long\u

我正在使用manage.py loaddata将sqlite生成的fixture加载到postgresql数据库中。当加载到名称较长的ManyToManyField时,加载失败

我跟踪到数据库适配器:usr/local/lib/python2.6/dist-packages/django/db/backends/postgresql_psycopg2/base.py line 44

返回self.cursor.executequery,args

查询值正确:“选择当前值”\a\u long\u long\u table\u name\u id\u seq\

但是它失败了,出现了DatabaseError:a_long_long_table_name_i不是序列

显然,在执行此语句后,名称被截断,但我无法更深入地跟踪

django版本:1.2

如何解决此问题?

我从中找到答案,postgres表名的最大限制为63。要增加该限制,必须更改其源代码并将NAMEDATALEN设置为更高的值。但问题是,在django中,很容易超过这一限制,因为多对多字段的关联表名称通常采用以下格式:应用程序名称\u model1\u名称\u model2\u名称


无论如何,我决定缩短模型名称,而不是重新编译源代码。

您知道可以使用应用程序标签和db_table专门告诉数据库应该使用什么名称作为表名,对吗?这意味着您不需要缩短模型的名称,而是保持它们的描述性


据我所知,Postgres将在创建时截断数据库表和字段的名称,使用一个始终产生相同名称的函数。这意味着只需要修改装置。确定Postgres中的实际名称,并对夹具数据执行查找替换

Postgres中列名的最大长度是64-您的两个示例都远小于此长度。可能错误消息本身只是截断了列名。手动运行查询时会发生什么情况?“a_long_long_table_name_”不是实际的表名,比这个长得多。所以在postgres中有一个硬限制,表名应该少于64个字母?