Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
奇怪的PostgreSQL“;值太长,无法更改类型字符(500)";_Sql_Database_Django_Postgresql_Postgresql 9.1 - Fatal编程技术网

奇怪的PostgreSQL“;值太长,无法更改类型字符(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,如果这有助于进一步解释问题的话 关于为什么会发生这种情况以及我能做些什么来修复它,有什么想法吗?字符变

我有一个Postgres模式,它看起来像:

问题是,每当我在“描述”列中保存长度超过500个字符的文本时,就会出现以下错误:

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 = "";