搜索整个postgres数据库?

时间:2013-06-14 13:25:19

标签: postgresql

我有一个庞大的数据库,我不介意离开搜索一段时间,但我不能因各种原因转储整个数据库。我能写的最简单的查询是什么,它将搜索数据库中所有表的所有字段以获取特定的文本字符串?

以下内容不起作用,但应展示我希望看到的内容:

 SELECT * FROM * where * like '%mystring%'

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

SELECT语句始终返回结果集。结果集是一种具有列名的表,每个结果都有一行。

您正在寻找一个字符串。因此,根本不需要查询任何非文本列。

必须指定select的'from'子句。您可以查询数据库中有关所有表名的元数据信息。然后获取要在'where'子句中使用的所有文本列(如char,varchar,clob,...)。然后在每个表格上应用构造的选择。

该算法可以用存储过程或任何程序表示。

是什么阻止您转储数据库?在UNIX系统上,您可以将转储直接传递给'grep'命令。

答案 1 :(得分:5)

您可以利用PostgreSQL中tablename.*可以转换为文本的事实。

因此,SELECT t.* FROM tablename t WHERE (t.*)::text LIKE '%somestring%'将返回任何列包含somestring的行,无论列的类型如何。

如果在SELECT table_schema, table_name FROM information_schema的循环中使用,它可以与数据库转储中的grep相比,除非您不需要转储。