我有一个庞大的数据库,我不介意离开搜索一段时间,但我不能因各种原因转储整个数据库.我能写的最简单的查询是什么,它将搜索数据库中所有表的所有字段以获取特定的文本字符串?
以下内容不起作用,但应展示我希望看到的内容:
SELECT * FROM * where * like '%mystring%'
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
SELECT语句始终返回结果集.结果集是一种具有列名称的表,每个结果都有一行.
你正在寻找一个字符串.因此,根本不需要查询任何非文本列.
必须指定select的'from'子句.您可以查询数据库中有关所有表名的元数据信息.然后获取要在'where'子句中使用的所有文本列(如char,varchar,clob,...).然后在每个表上应用构造的选择.
该算法可以在存储过程中或由任何程序表示.
是什么阻止您转储数据库?在UNIX系统上,您可以将转储直接传递给'grep'命令.
您可以利用PostgreSQL中的事实,tablename.*可以转换为文本.
因此,SELECT t.* FROM tablename t WHERE (t.*)::text LIKE '%somestring%'无论列somestring的类型如何,都将返回任何列包含的任何行.
如果在循环中使用SELECT table_schema, table_name FROM information_schema,它可以与grep数据库转储中的数据库转储相比,除非您不需要转储.
| 归档时间: |
|
| 查看次数: |
728 次 |
| 最近记录: |