开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

请问flink使用jdbc catalog读取postgresql中的数据,该怎么处理呢?

请问flink使用jdbc catalog读取postgresql中的数据,schema名里包含中横线,该怎么处理呢?select * from enjoy-pms.rl_leave_problem limit 10; 报错org.postgresql.util.PSQLException: ERROR: syntax error at or near "-"

展开
收起
真的很搞笑 2023-11-21 08:08:04 140 0
2 条回答
写回答
取消 提交回答
  • 在Flink中使用JDBC Catalog读取PostgreSQL中的数据时,如果schema名包含中在Flink中使用JDBC Catalog读取PostgreSQL中的数据时,如果schema名包含中横线(-),需要将schema名用双引号括起来。正确的查询语句如下:

    SELECT * FROM "enjoy-pms"."rl_leave_problem" LIMIT 10;
    
    2023-11-21 15:34:44
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    这个问题是因为在PostgreSQL中,表名、列名等标识符可以包含字母、数字和下划线,但不支持中横线(-)。所以,当尝试使用包含中横线的schema名时,PostgreSQL会将其视为非法语法并抛出错误。

    要解决这个问题,您可以尝试以下几种方法:

    1. 将schema名中的中横线替换为其他合法字符,例如下划线。
    2. 在引用含有特殊字符(如中横线)的标识符时,将其括在双引号内:
      select * from "enjoy-pms".rl_leave_problem limit 10;
      
      这样PostgreSQL就会识别出enjoy-pms是一个schema名字,并正确解析查询语句。
    3. 在创建schema时,避免使用特殊字符,并尽可能采用简单易记的名字。这样既可以避免上述问题,也有助于提高可读性和可维护性。
    4. 如果是在Java/Scala/Python等语言中使用Flink的JDBC connector,那么可以考虑将带有中横线的schema名转换成对应的语言编码格式,例如在Java中,可以将schema名转换成字符串字面量:"enjoy_pms".
    2023-11-21 14:13:45
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    PostgreSQL 物联网六脉神剑 立即下载
    PostgreSQL在哈啰的实践-周飞 立即下载
    PostgreSQL高并发数据库应用数据 立即下载