2013-05-08 279 views
3

我已经非常复杂的数据,我插入postgresql和我使用双美元($$)转义。不过,我有一行以美元符号结尾并导致错误。 原始行像'dd^d\w=dd$',并且在逃脱时'$$dd^d\w=dd$$$'Postgresql逃脱美元符号

我该如何逃避这个特定的行?

回答

5

使用任何字符串双美元里面来区分它:

select $anything$abc$$anything$; 
?column? 
---------- 
abc$ 

insert是相似的:

insert into t (a, b) values 
($anything$abc$$anything$, $xyz$abc$$xyz$); 
INSERT 0 1 
select * from t; 
    a | b 
------+------ 
abc$ | abc$ 
+0

我在做一个插入选择。 – zulq 2013-05-08 11:33:41

+0

@zulq插入是一样的。见编辑的答案。 – 2013-05-08 11:36:27

+0

非常感谢。有用。 – zulq 2013-05-08 11:58:15

3

虽然Clodo阿尔是完全正确的,我认为有你需要看的这另一个方面在:

你为什么要做自己的报价?通常应该通过编程语言的客户端驱动程序使用参数化(“准备好”)语句。请参阅bobby tables以获取常见语言的一些示例。使用参数化语句意味着您不必在意再做任何引用,数据库客户端驱动程序会为您处理。

我想给你一个例子,但你还没有提到你的客户端语言/工具。

+0

我正在使用activerecord,并在此之前发布了如何处理这些数据,但没有提供解决方案。 – zulq 2013-05-08 16:48:20