Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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
Amazon redshift 使用数据对数值列进行红移_Amazon Redshift_Ddl - Fatal编程技术网

Amazon redshift 使用数据对数值列进行红移

Amazon redshift 使用数据对数值列进行红移,amazon-redshift,ddl,Amazon Redshift,Ddl,我有一个红移的表,它有rate列和date列。“速率”列的数字数据类型为18,2。我想把它改成18,4。由于此列已包含数据,我无法更改此列。是否有任何方法可以在不丢失数据的情况下做到这一点。下面是我使用的语法和我得到的错误。 这就是语法 ALTER TABLE pricetable ALTER COLUMN product_price TYPE numeric(18,4); 这就是错误所在 无效操作:无法更改关系pricetable[SQL State=0A000,DB Err

我有一个红移的表,它有rate列和date列。“速率”列的数字数据类型为18,2。我想把它改成18,4。由于此列已包含数据,我无法更改此列。是否有任何方法可以在不丢失数据的情况下做到这一点。下面是我使用的语法和我得到的错误。 这就是语法

ALTER TABLE pricetable 
   ALTER COLUMN product_price 
   TYPE numeric(18,4);
这就是错误所在

无效操作:无法更改关系pricetable[SQL State=0A000,DB Errorcode=500310]的列product\u price**


这可能失败的原因有很多。我将在此使用红移文档来显示许多:

ALTER COLUMN COLUMN_name TYPE new_data_TYPE更改 定义为VARCHAR数据类型的列的大小。考虑一下 以下限制:

不能使用压缩编码BYTEDICT更改列, 运行长度、文本255或文本32K

不能将大小减小到小于现有数据的最大大小

不能使用默认值更改列

不能使用唯一、主键或外键更改列

无法更改事务块中的列开始。。。终止 有关事务的更多信息,请参阅可序列化隔离

这导致了以下问题/可能性:

“产品价格”列的编码是什么? 现有数据是否符合18,4?小数点前丢失了2位-可能需要20,4。 产品价格是否有默认值? 列product_price(产品价格)是否有限制,或者它是一个键? 您是处于自动提交模式还是在执行时管理事务块?运行结束;作为一个街区
根据您遇到的问题,有一些方法可以解决这些问题。像自动提交模式、添加新列、重命名旧列和新列以及删除旧列等。

为什么更改列不起作用?不做你想做的事?为什么你认为你不能改变数据类型?我使用的是相同的语法,但我使用的不是SET数据类型,而是TYPE only。改变这一点也不管用。我的桌子是红移的。它是否有效?您能否向我们展示您的SQL、错误消息和/或任何其他结果?我们现在只是猜测发生了什么红移不是postgresql。如果您的问题是关于红移的,您应该更改问号。