Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql逃逸美元符号_Postgresql - Fatal编程技术网

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$

我将非常复杂的数据插入到postgresql中,并使用双美元
($$)
进行转义。然而,我有一行以美元符号结尾,导致了错误。 原始行类似于
“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,我在这里发布了如何处理这些数据,但没有一个解决方案。