查询 Postgres 数据库
Posted
技术标签:
【中文标题】查询 Postgres 数据库【英文标题】:Querying Postgres database 【发布时间】:2015-08-17 14:16:56 【问题描述】:我想查询一个数据库,其中一个列与一个字符串匹配并且这个字符串有一个单引号字符'。我无法运行以下查询
SELECT *
from <table>
where <column>='robocopy'w (ithout)backup.pcap';
原因是单引号用于搜索列; 我尝试了双引号但没有帮助。 如果我在字符串中的单引号之前添加一个额外的单引号,我可以绕过这个。
SELECT *
from <table>
where <column>='robocopy''w (ithout)backup.pcap';
但我需要一个更好的解决方案,因为每次都添加单引号是不切实际的,特别是如果它们很长并且有很多单引号。
【问题讨论】:
你如何运行这个?从程序内部?如果是,哪种编程语言?您是否将搜索值作为参数传递?您如何传递该搜索值?你从哪里得到它? 是来自 perl 脚本,是的搜索值是我从文件中读取并使用变量将其放入此查询的参数。 问题不是我从脚本运行,我也不能直接运行。如果我能解决这个问题,我可以相应地修改脚本。 双美元解决了我的问题.. select path from table where path=$$\Script_test(special_characters)\robocopy'w (ithout)backup.pcap$$;这工作:) 感谢您的帮助 【参考方案1】:您需要在将查询字符串发送到数据库之前对其进行转义。我不能告诉你怎么做,因为你没有发布代码,但是如果你直接在 psql 控制台中运行这个查询,你可以通过将所有约束放在 $$ 和 $$ 中来转义引号,如文档中所引用[1]。示例:
SELECT * from <table> where <column> = $$robocopy'w (ithout)backup.pcap$$;
[1]http://www.postgresql.org/docs/current/interactive/sql-syntax-lexical.html#SQL-SYNTAX-DOLLAR-QUOTING
【讨论】:
不,你不会。单引号通过在 SQL 中加倍来转义。\'
没有特殊含义,除非 Postgres 被配置为接受非标准字符串(并且“符合标准的字符串”在很长一段时间以来一直是默认值)。
感谢 chromano 的快速响应。这是我可以查询的列条目,如果我给出部分路径: select path from 以上是关于查询 Postgres 数据库的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Diesel 中对 Postgres 数据库执行删除子查询?