我在这篇文章中发现了类似的问题
(Find a value anywhere in a database)的最大值
但是当我在使用PostgreSQL服务器的数据库中尝试时,
它不工作
如何使用PostgreSQL服务器进行类似的查询
我正在使用DBeaver执行查询
到目前为止,我使用这个查询来获取表,使用table_name或column_name进行搜索
select table_catalog, table_schema, table_name, column_name
from information_schema.columns
where 1 = 1
--and table_schema = 'ws_go_daa'
and table_name like '%prism%'
--and column_name like '%itm%'
and column_name like '%po%'
字符串
感谢你的帮助.
1条答案
按热度按时间v2g6jxz61#
你在正确的路径上查看了
information_schema.columns
。你可以在那里获得所有的模式、表和列名,并在它们上面搜索,使用动态语句搜索你的值。Demo at db<>fiddle:字符串
| 表模式|表名|列名|R|
| --|--|--|--|
| 公共|一些表|some_text_column|(“(some_specific_text_value)”)|
型
| 表模式|表名|列名|R|
| --|--|--|--|
| 公共|另一张table|一些整数列|(“(1234567890)”)|
返回整个匹配记录的原因是为了以后能够精确定位该行。另一种方法是在
pg_index
中查找非部分唯一索引,并仅返回唯一标识该行的最小列集。非严格版本也可以通过运行一个
target_value::text in (col1::text,col2::text...)
而不是逐列检查来摆脱一个非嵌套循环。虽然这仍然会给你给予匹配,但它不会指定匹配的列。所有类型都可以与
text
兼容,因此可以删除整个strict
逻辑。我认为这是值得保留的性能:查找'2023-11-08'::date
不必检查数据库中的所有text
。它可以改进以尝试比较类似的类型,无论何时查找date
都要检查timestamp
,反之亦然。您可能需要重载它以避免显式强制转换:
x
的一种或多种
| 表模式|表名|列名|R|
| --|--|--|--|
| 公共|一些表|some_text_column|(“(some_specific_text_value)”)|