2013-07-30 29 views
1

我在这里问了类似的问题:hstore值与空格。并由用户解决:Clodoaldo Neto。现在我遇到了包含单引号的字符串的下一个案例。单引号hstore值

SELECT 'k=>"name", v=>"St. Xavier's Academy"'::hstore; 

我尝试了用美元报价字符串常量通过阅读http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS

SELECT 'k=>"name", v=>$$St. Xavier's Academy$$'::hstore; 

但我无法得到它的权利。

如何使用包含单引号的字符串来创建postgresql hstore? 这个查询似乎有更多这样的例外可能。如何一次解决所有问题?

回答

2

您可以像使用字符串文字中的任何其他单引号一样转义嵌入的单引号:double it。

SELECT 'k=>"name", v=>"St. Xavier''s Academy"'::hstore; 
-- ------------------------------^^ 

或者,你可以引述美元整串:

SELECT $$k=>"name", v=>"St. Xavier's Academy"$$::hstore; 

你用交谈的PostgreSQL无论界面应该利用这些引号和转义问题护理。如果你使用手动字符串来构建你的SQL,那么你应该使用你的驱动程序的引用和占位符方法。


hstore's internal parsing理解围绕键双引号:

双引号键和包括空格,逗号,= S或>价值观。

正如您所述,美元报价是针对SQL字符串文字的,hstore的分析器并不知道它们的含义。