如何在PostgreSQL查询中格式化带有双美元符号(`$$`)的LaTeX公式?

时间:2019-03-08 10:47:57

标签: postgresql escaping string-literals

我正在通过一个脚本构建PostgreSQL查询,该脚本返回格式化的LaTeX公式,并用双美元符号包围,例如以下代码:

$$6 x^{14} + \frac{7 x^{13}}{5} + \frac{13 x^{8}}{7} + \frac{5 x^{5}}{6}$$

此外,这些公式属于一个数组,因此完整的INSERT查询将如下所示:

INSERT INTO table("array")
VALUES (
'{"$$6 x^{14} + \frac{7 x^{13}}{5} + \frac{13 x^{8}}{7} + \frac{5 x^{5}}{6}$$",
"$$\frac{9 x^{11}}{13} + \frac{13 x^{9}}{7} + x^{8} + \frac{x^{6}}{3}$$",
"$$2 x^{13} + \frac{52 x^{12}}{3} + \frac{65 x^{4}}{9} + \frac{3}{2}$$"}'
)

但是,在插入之后,\之前的反斜杠(frac)在数据库中消失了(我得到的是frac而不是\frac。因此,我的公式不会在我的应用程序中呈现良好。

这是单元格的内容:

{"$$6 x^{14} + frac{7 x^{13}}{5} + frac{13 x^{8}}{7} + frac{5 x^{5}}{6}$$",
"$$frac{9 x^{11}}{13} + frac{13 x^{9}}{7} + x^{8} + frac{x^{6}}{3}$$",
"$$2 x^{13} + frac{52 x^{12}}{3} + frac{65 x^{4}}{9} + frac{3}{2}$$"}

我在Python中使用sympy module自动生成公式,因此在每个frac都不是可选选项之前,请手动将反斜杠加倍。

我应该怎么做才能防止这种行为发生?

1 个答案:

答案 0 :(得分:0)

反斜杠是代表字符串数组的字符串中的转义字符:

SELECT ('{a,"b\"c\\d"}'::text[])[2];
 text  
-------
 b"c\d
(1 row)

如果反斜杠没有在具有特殊含义的字符之前,则将其忽略。

将PostgreSQL中字符串数组的字符串表示形式内的所有反斜杠加倍,以获得所需的内容。

如果这样的反斜杠是字符串常量中唯一出现的反斜杠,则可以按以下步骤进行操作:

SELECT replace(
          '{"$$6 x^{14} + \frac{7 x^{13}}{5} + \frac{13 x^{8}}{7} + \frac{5 x^{5}}{6}$$",
           "$$\frac{9 x^{11}}{13} + \frac{13 x^{9}}{7} + x^{8} + \frac{x^{6}}{3}$$",
           "$$2 x^{13} + \frac{52 x^{12}}{3} + \frac{65 x^{4}}{9} + \frac{3}{2}$$"}',
          '\',
          '\\'
       )::text[];