【问题标题】:How to reproduce with a manual query: [Amazon](500310) Invalid operation: failed to find conversion function from "unknown" to integer;如何通过手动查询重现:[Amazon](500310) 无效操作:找不到从“未知”到整数的转换函数;
【发布时间】:2020-07-03 16:44:10
【问题描述】:

我最近在 Dropwizard 项目中添加了一个 maven 依赖项:

        <dependency>
            <groupId>com.amazon.redshift</groupId>
            <artifactId>redshift-jdbc42-no-awssdk</artifactId>
            <version>1.2.45.1069</version>
        </dependency>

它正在替换以前使用的org.postgresql.Driver,从那时起我的一些查询返回

! Causing: org.skife.jdbi.v2.exceptions.UnableToCreateStatementException: java.sql.SQLException: [Amazon](500310) Invalid operation: failed to find conversion function from "unknown" to integer;

我怀疑我可能有几十个查询需要适应新驱动程序。

因为我不想每次想要测试对查询的更改是否能解决问题时都必须重新启动服务器,所以我想针对 Redshift DB 手动运行查询,以便快速识别需要修复的部分查询。

我的问题:从 IntelliJ DB 控制台中手动运行查询时,我无法重现该错误。我什至从https://docs.aws.amazon.com/redshift/latest/mgmt/configure-jdbc-connection.html(我下载了这个:https://s3.amazonaws.com/redshift-downloads/drivers/jdbc/1.2.45.1069/RedshiftJDBC42-no-awssdk-1.2.45.1069.jar)下载了 Amazon Redshift 驱动程序的 JAR,并用它在 IntelliJ 中建立了一个新的数据库连接。但是,从 IntelliJ DB 控制台手动运行完全相同的查询不会给我错误。

与从控制台手动运行相比,任何人都可以想到在服务器运行时可能导致查询出错的配置是什么?以及如何让它停止在服务器上抛出异常或在控制台中运行时开始导致相同的错误?

【问题讨论】:

    标签: intellij-idea jdbc amazon-redshift driver dropwizard


    【解决方案1】:

    我假设问题出在 JDBI 和 Amazon Redshift 驱动程序之间。无论如何,这里有一个暂时解决问题的修复程序:

    对于这样的查询:

        //language=PostgreSQL
    public static final String MY_QUERY = "" +
        "WITH my_table(someid, groupname) AS (\n" +
        "    SELECT :someId, :groupName\n" +
        ")\n" +
        "SELECT 'something'\n" +
        "FROM my_table mt\n" +
        "FULL OUTER JOIN another_table at ON at.accountid = mt.someid AND at.groupname = mt.groupname";
    

    添加\\:\\:int 摆脱了错误:

        //language=PostgreSQL
    public static final String MY_QUERY = "" +
        "WITH my_table(someid, groupname) AS (\n" +
        "    SELECT :someId\\:\\:int, :groupName\\:\\:text\n" +
        ")\n" +
        "SELECT 'something'\n" +
        "FROM my_table mt\n" +
        "FULL OUTER JOIN another_table at ON at.accountid = mt.someid AND at.groupname = mt.groupname";
    

    【讨论】:

      猜你喜欢
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      • 2013-08-07
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      • 2014-10-01
      相关资源
      最近更新 更多