Hologres exec_external_sql 单引号除了用$$符转义还有其他吗?
在 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 查询时,确保正确地替换这些转义字符。
关键字、保留字、系统字段、特殊字符、大小写需使用双引号("")进行转义。
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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
本技术圈将为大家分析有关阿里云产品Hologres的最新产品动态、技术解读等,也欢迎大家加入钉钉群--实时数仓Hologres交流群32314975