Postgresql逃逸美元符号
我将非常复杂的数据插入到postgresql中,并使用双美元Postgresql逃逸美元符号,postgresql,Postgresql,我将非常复杂的数据插入到postgresql中,并使用双美元($$)进行转义。然而,我有一行以美元符号结尾,导致了错误。 原始行类似于“dd^d\w=dd$”,转义时为“$$dd^d\w=dd$$$” 如何转义此特定行?使用双美元内的任何字符串来区分它: select $anything$abc$$anything$; ?column? ---------- abc$ 插入的类似: insert into t (a, b) values ($anything$abc$$anything$
($$)
进行转义。然而,我有一行以美元符号结尾,导致了错误。
原始行类似于“dd^d\w=dd$
”,转义时为“$$dd^d\w=dd$$$”
如何转义此特定行?使用双美元内的任何字符串来区分它:
select $anything$abc$$anything$;
?column?
----------
abc$
插入的类似:
insert into t (a, b) values
($anything$abc$$anything$, $xyz$abc$$xyz$);
INSERT 0 1
select * from t;
a | b
------+------
abc$ | abc$
虽然Clodoaldo说得很对,但我认为这还有另一个方面需要注意:
你为什么要自己引用?您通常应该通过编程语言的客户机驱动程序使用参数化(“准备好的”)语句。有关通用语言的一些示例,请参见。使用参数化语句意味着您不必再关心任何引用,它由数据库客户机驱动程序为您处理
我想给你举个例子,但你没有提到你的客户机语言/工具。我发现这个问题是在linux shell中使用双美元文本执行查询时遇到的疑难解答。例如,psql中的选择“$abc$”
会给出正确的结果$abc$
,而从linux shell调用的psql-U me-c“select'$abc$”
会产生不正确的结果$
(前提是没有系统变量abc
)
在这种情况下,包装到另一个分隔符($wrapper$$abc$$wrapper$
)将没有帮助,因为主要问题是在shell上下文中解释美元。可能的解决方案是转义美元(psql-ume-c“select'\$abc\$”
),但这会在psql中调用时产生反斜杠。为了生成在psql和linux shell中都可用的相同查询,psql-U me-c“select concat(chr(36),'abc',chr(36))”
是通用的解决方案。我正在执行一个insert not select。我使用的是activerecord,我在这里发布了如何处理这些数据,但没有一个解决方案。