我有一个庞大的数据库,我不介意花费一些时间进行搜索,但由于各种原因我无法倾倒整个数据库。有什么最简单的查询语句可以搜索数据库中所有表格的所有字段以查找特定的文本字符串?
以下查询语句不能实现上述需求,但可以说明我的期望:
有什么想法吗?
以下查询语句不能实现上述需求,但可以说明我的期望:
SELECT * FROM * where * like '%mystring%'
有什么想法吗?
SELECT * FROM * where * like '%mystring%'
tablename.*
可以转换为文本。SELECT t.* FROM tablename t WHERE (t.*)::text LIKE '%somestring%'
将返回任何一行,其中任何列包含somestring
,无论列的类型如何。SELECT table_schema,table_name FROM information_schema
上循环使用它,则类似于数据库转储中的grep
,但您不需要该转储。SELECT语句总是返回结果集。结果集是一种带有列名的表格,每个结果都有一行。
您正在查找字符串。因此,根本不需要查询任何非文本列。
必须指定select语句的“from”子句。您可以查询数据库中关于所有表名的元数据信息。然后获取所有文本列(如char、varchar、clob等),用于“where”子句。然后在每个表上应用构建的select语句。
此算法可以通过存储过程或任何程序来表达。
什么阻止您转储数据库?在UNIX系统上,您可以直接将转储管道传输到“grep”命令。
grep
或vim
)来完成这个任务。如果您没有权限转储数据库,那么您也可能无法读取所有表格... - Erwin Brandstetter