开发者社区 > 大数据与机器学习 > 实时数仓 Hologres > 正文

Hologres exec_external_sql 单引号除了用$$符转义还有其他吗?

Hologres exec_external_sql 单引号除了用$$符转义还有其他吗?

展开
收起
真的很搞笑 2023-12-25 08:08:43 65 0
2 条回答
写回答
取消 提交回答
  • 在 Hologres 中,当您需要执行外部 SQL 并且希望插入单引号时,通常可以使用 $ 符号进行转义。但是,如果您同时还需要传递参数,并且这些参数中也可能包含 $ 符号,确实可能会导致冲突。

    解决此问题的一种方法是使用不同的转义字符,比如使用 %% 代替 $ 来转义单引号。

    以下是一个简单的示例:

    假设您有以下 SQL 查询:

    SELECT * FROM my_table WHERE name = 'O'Connor';
    

    如果您想通过 Hologres 的 exec_external_sql 执行此查询,并希望将 'O'Connor' 作为参数传递,您可以使用 $ 进行转义:

    SELECT * FROM my_table WHERE name = '
    $$
    O''Connor
    $$
    ';
    

    但是,如果您还需要传递其他参数,并且这些参数中也可能包含 $ 符号,那么您可能需要考虑使用其他的转义字符,例如 %%:

    SELECT * FROM my_table WHERE name = '%%O''Connor%%';
    

    然后,在您的应用程序中,当您构建这个 SQL 查询时,确保正确地替换这些转义字符。

    2023-12-26 11:42:42
    赞同 展开评论 打赏
  • 关键字、保留字、系统字段、特殊字符、大小写需使用双引号("")进行转义。

    Hologres对列名、表名等关键字的限制包括:列名称不能以hg开头、Schema名称不能以holo、hgpg开头。同时还需要遵循PostgreSQL本身的关键字、保留字、系统字段规范,详情请参见关键词列表、系统列列表,这些PostgreSQL关键词作为列名时需要加双引号("")进行转义。

    表名和列名均对大小写不敏感,如需定义大写表名、大写列名、特殊字符表名或列名、以数字开头的表名或列名时,可使用双引号("")进行转义。

    Hologres V2.0版本起优化了设置表属性时使用双引号("")进行转义的语法。如果需要对列名进行转义,则需要使用新的语法。如果您仍希望使用旧语法,需要开启如下GUC。

    -- session级别开启旧语法开关
    set hg_disable_parse_holo_property = on;

    -- DB级别开启旧语法开关
    alter database set hg_disable_parse_holo_property = on;

    建表概述https://help.aliyun.com/zh/hologres/user-guide/overview-3?spm=a2c4g.11186623.0.i17

    2023-12-25 08:31:28
    赞同 展开评论 打赏

本技术圈将为大家分析有关阿里云产品Hologres的最新产品动态、技术解读等,也欢迎大家加入钉钉群--实时数仓Hologres交流群32314975

相关产品

  • 实时数仓 Hologres
  • 相关电子书

    更多
    实时数仓Workshop(广州站)- 李佳林 立即下载
    阿里云实时数仓Hologres技术揭秘2.0 立即下载
    实时数仓Hologres技术实战一本通2.0版(下) 立即下载