无需重新编译即可提高 PostgreSQL 的 NAMEDATALEN
是否可以将 PostgreSQL 中的标识符名称限制提高到 63 个字符以上,而无需重新编译所有数据库系统?由于此限制,我的 Django 项目生成了重复的索引名称,并且由于我的项目的业务需求,无法更改模型名称。
Is it possible to raise the identifier name limit, in PostgreSQL, to above 63 characters, without having to recompile all the database system? I have this Django project generating repeated index names because of this limit, and there's no way to change the model names because of my project's business requirements.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
对我来说这听起来像是一个 Django bug。早期的错误未为 PostgreSQL 指定最大名称长度已修复。我希望 Django 生成适合 max_name_length() 的数据库标识符。也许我过于乐观了。
Django 已经知道截断并附加可重复的哈希值以适合 Oracle 的 max_name_length()。 (请参阅命名问题。)当然,它们不只是将很长的内容放在一起、复合标识符,如果您使用任何其他平台,希望一切顺利。
您是否有可能在某个地方覆盖默认行为,导致 Django 忽略 max_name_length() ?
稍后。 。 。
实际上,他们只是将一个长而复合的标识符拼凑在一起,并希望得到最好的结果。 osdir.com 上的一个帖子表明它将在 Django 1.3 中修复。请参阅数据库创建、表名称和索引名称的问题 - msg#00142
再晚一点。 。 .
票证在 MySQL 上运行测试时出现索引长度错误 显示对 MySQL 进行了相同的修复已在 1.2 版本中修复。而且 PostgreSQL(可能还有其他所有平台)也有同样的问题。我不知道 PostgreSQL 的修复是否已进入 1.2。
This sounds like a Django bug to me. An earlier bug, maximum name length not specified for PostgreSQL, has been fixed. I'd expect Django to generate database identifiers that fit max_name_length(). Maybe I'm being unreasonably optimistic.
Django already knows to truncate and append a repeatable hash to fit Oracle's max_name_length(). (See Naming Issues.) Surely they don't just throw together a long, compound identifier and hope for the best if you're using any other platform.
Is it possible you're overriding default behavior somewhere that's leading Django to ignore max_name_length()?
Later . . .
Actually, they just throw together a long, compound identifier and hope for the best. A thread on osdir.com suggests it will be fixed in Django 1.3. See Problems with DatabaseCreation, table names, and index names - msg#00142
Still later . . .
The ticket Index length errors running tests on MySQL shows that the same fix for MySQL was fixed in version 1.2. Also that PostgreSQL (and probably every other platform) had the same problem. I don't know whether a fix for PostgreSQL made it into 1.2.
不,不可能,您必须使用更短的名称。其他 dbms 允许的字符甚至更少,您始终必须检查这些约束。
No, not possible, you must use shorter names. Other dbms's allow even less characters, you always have to check these constraints.