奇怪的PostgreSQL“;值太长,无法更改类型字符(500)";
我有一个Postgres模式,它看起来像: 问题是,每当我在“描述”列中保存长度超过500个字符的文本时,就会出现以下错误:奇怪的PostgreSQL“;值太长,无法更改类型字符(500)";,sql,database,django,postgresql,postgresql-9.1,Sql,Database,Django,Postgresql,Postgresql 9.1,我有一个Postgres模式,它看起来像: 问题是,每当我在“描述”列中保存长度超过500个字符的文本时,就会出现以下错误: value too long for type character varying(500) 在Postgres的文档中,它说类型文本可以有无限个字符 我正在使用postgresql-9.1 此表是使用Django 1.4生成的,模型中的字段类型是TextField,如果这有助于进一步解释问题的话 关于为什么会发生这种情况以及我能做些什么来修复它,有什么想法吗?字符变
value too long for type character varying(500)
在Postgres的文档中,它说类型文本可以有无限个字符
我正在使用postgresql-9.1
此表是使用Django 1.4生成的,模型中的字段类型是TextField,如果这有助于进一步解释问题的话
关于为什么会发生这种情况以及我能做些什么来修复它,有什么想法吗?字符变化与文本不同。试着跑步
ALTER TABLE product_product ALTER COLUMN code TYPE text;
这会将列类型更改为文本,该类型仅限于一些非常大的数据量(您可能永远不会实际命中它)。通过将列指定为
VARCHAR(500)
您已经设置了一个明确的500个字符的限制。您可能没有明确地自己做这件事,但Django在某个地方为您做了这件事。当您没有显示模型、完整的错误文本或产生错误的查询时,告诉您哪里是困难的
如果不需要,请使用非限定的VARCHAR
,或使用文本类型
varchar
和text
的长度仅受系统对列大小的限制(大约1GB)和内存的限制。但是,将长度限定符添加到varchar
会手动设置较小的限制。以下各项基本相当:
column_name VARCHAR(500)
column_name VARCHAR CHECK (length(column_name) <= 500)
column_name TEXT CHECK (length(column_name) <= 500)
在显式强制转换中,它会导致截断:
regress=> SELECT repeat('x',501)::varchar(1);
-[ RECORD 1 ]
repeat | x
因此,我认为您使用的是VARCHAR(500)
列,您查看的表或数据库实例错误。我们也遇到了同样的问题。我们解决了在实体属性定义中添加“长度”的问题:
@Column(columnDefinition="text", length=10485760)
private String configFileXml = "";
问题是否与psql insert一起出现,还是仅在django中出现?既然您是从django模型生成表的,那么显示django模型代码如何?我刚刚通过命令行检查了psql insert,那里没有发生错误。这可能是编码问题。不,这不是编码问题。请显示Django生成的实际INSERT语句,以及错误消息的完整、准确文本。你可以从PostgreSQL日志文件中获取这两个信息。我编辑了这个问题,问题是描述字段已经是文本类型了。我正在使用文本类型查看描述column@Parham我明白了。解释仍然相关varchar(500)
正在某处使用。请在问题中显示实际查询,以便我们可以看到失败的查询。如果无法从Django获取,请从PostgreSQL日志文件获取,然后编辑问题,将查询添加到问题中。您可能需要在postgresql.conf
中设置log\u statement='all'
,如果完整的查询文本没有记录在错误旁边,则重新加载postgresql。我只是按照您的建议检查了日志文件,结果表明错误是在保存另一个相关字段时发生的
@Column(columnDefinition="text", length=10485760)
private String configFileXml = "";