我在这里问了类似的问题:带空格的hstore值。并由用户解决:Clodoaldo Neto。现在我遇到了包含单引号的字符串。
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? 似乎此查询可能存在更多此类异常。如何一次解决所有问题?
答案 0 :(得分:2)
您可以使用与字符串文字中的任何其他单引号相同的方式来转义嵌入式单引号:加倍。
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或> s的双引号键和值。
正如您所指出的,对于SQL字符串文字,美元引用是hstore的解析器不知道它们的含义。