Sql 更改数据类型时出现Vertica错误

Sql 更改数据类型时出现Vertica错误,sql,vertica,Sql,Vertica,我正在尝试使用以下查询将列从varchar转换为bigint: ALTER TABLE 'table_name' ALTER COLUMN 'colname' SET DATA TYPE BIGINT; 但我得到了以下错误: SQL Error [2377] [0A000]: [Vertica][VJDBC](2377) ROLLBACK: Cannot convert column "colname" from "varchar(128)" to type "int" [Vertica][

我正在尝试使用以下查询将列从varchar转换为bigint:

ALTER TABLE 'table_name' ALTER COLUMN 'colname' SET DATA TYPE BIGINT; 
但我得到了以下错误:

SQL Error [2377] [0A000]: [Vertica][VJDBC](2377) ROLLBACK: Cannot convert column "colname" from "varchar(128)" to type "int"
[Vertica][VJDBC](2377) ROLLBACK: Cannot convert column "colname" from "varchar(128)" to type "int"
com.vertica.util.ServerException: [Vertica][VJDBC](2377) ROLLBACK: Cannot convert column "src_mainuser" from "varchar(128)" to type "int"

该列具有类似于37439510的int值,但为varchar格式

答案不可能,这在Vertica deifnition不起作用:

两种方法

  • 创建新表、加载新表、删除旧表、重命名新表

  • 在表中创建新列。从旧柱中加载柱。更改表格以删除旧列


  • 如果您想保留您的桌子,请尝试:

    altertable\u name将colname列添加为\u int-DEFAULT colname::int

    然后:

    ALTER TABLE TABLE\u name ALTER colname\u列为\u int DROP DEFAULT

    然后:

    altertable\u name删除colname列

    最后:

    ALTER TABLE\u name将colname列重命名为colname


    但是,仅当您在
    表_name
    上没有将
    colname
    作为按列排序或按哈希()分段的列进行投影时才有效;您必须用另一个超级投影替换这些投影,并首先删除这些投影….

    似乎是一个数据问题,您在其中的某个地方有一个非整数。请尝试从tablename中选择colname::bigint(非常确定这是vertica的有效数据转换语法),如果出现错误,则该列中有一两个字符。这样做……没有错误……可能是vertica的限制……该错误没有提供太多信息,实际上没有提到冲突的数据类型。联系供应商,Vertica开发团队可能会有比我接下来说的更好的答案。标准的解决方法是,创建第二个列为大int的表,然后将旧表中的所有行大量插入其中。删除旧表,重命名新表。如果您从vertica获得更好的答案,请分享。vertica支持不会有帮助…这是他们意识到的限制。回答是的……这是唯一可能的方法。没有直接的类型转换可用