在 PostgreSQL 和 MySQL 中的所有表中查找特定数据

上周,一位客户询问 PostgreSQL 和 MySQL 如何在所有表中查找特定数据,所以我给了他们现在向您展示的两种解决方案。

首先我们来谈谈PostgreSQL。
您可以为此使用 PL/pgSQL。
我2 02 3 年在上海做了一个项目,当时数据库有几百张表。
由于客户端要查找某个UUID值,所以我直接写了匿名代码块:
sql 赚$$ 公告 录音记录; search_text 文本 := 'dcea8 8 9 1 -b4 e1 -4 5 f8 -8 cb9 -c8 a1 6 4 cb9 8 ff'; 查询文本; 开始吧。
用于录音 表模式;表名;选择列名 来自 information_schema.columns WHERE table_schema = '公共'; 和 data_type ('不同字符', '文本', 'uuid'); 链条 查询 := '选择' || rec.table_schema || '.' || rec.table_name || '.' || rec.column_name || ''' 作为位置,' || rec.column_name || '来自'|| rec.table_schema || '.' || rec.table_name || '哪里'|| rec.column_name || '::文本= $1 '; 使用 search_text 运行查询到 rec. 如果rec不为空; 发出“%”中发现的警告;重新定位; 如果结束了; 端环; 结束$$;
这段代码怎么样?首先声明一个变量来存储您要查找的值,然后声明 varchar;在公共模式下传递所有文本和 uuid 列,为每个列生成 SQL,并在找到时发送通知。
在 pgAdmin 中运行后,几秒钟内结果就出来了。
这个优势太明显了。
复杂的查询可以直接编写,无需编写脚本。
适合大型数据库。

MySQL 不工作。
它没有 PL/pgSQL。
我在2 02 3 年帮助北京的另一家公司,最终使用了两种方法:
第一种方法是手动生成查询,这是一个比较困难的问题。
首先查看信息表,看看有哪些列可用:
sql concat('select''', table_schema, '.' , table_name, '.' , column_name, ''' as location, ', column_name, ' from ', table_schema, '.' , table_name, ' where ', column_name, ' = ''', search_query as 'dcea8 8 9 1 -b4 e1 -4 5 f8 -8 cb9 -c8 a1 6 4 cb9 8 ff'',''') 来自 information_schema.columns 其中 table_schema = 'your_database_name' 和 data_type ('varchar', 'text', 'char');
将结果中的search_query复制并一一粘贴到MySQL客户端中执行。
我确实做到了。
当我为客户寻找数据时,我曾经提出了几十个问题,最终缩小了我的范围。

第二件事是编写一个shell脚本来自动运行它:
bash !/bin/bash SEARCH_TEXT='dcea8 8 9 1 -b4 e1 -4 5 f8 -8 cb9 -c8 a1 6 4 cb9 8 ff' DATABASE='你的数据库名称' USERNAME='你的用户名' PASSWORD='您的密码'
QUERIES=$(mysql -u$用户名 -p$PASSWORD -D$DATABASE -N -e" SELECT CONCAT('SELECT ''', table_schema, '.' , table_name, '.' , column_name, ''' AS 位置, ', column_name, ' FROM ', table_schema, '.' , table_name, 'WHERE ', column_name, ' = ''', $SEARCH_TEXT, '' 来自 information_schema.columns WHERE table_schema = '$DATABASE' AND data_type IN ('varchar', 'text', 'char'); ")
-r 读取 QUERY 时;执行 mysql -u$用户名 -p$密码 -D$数据库 -e "$QUERY" <<<“$QUERIES”
完成。
我2 02 3 年在广州尝试过,当用户数据量增加时,手动运行肯定行不通。
该脚本将在 5 分钟内产生结果。
但最主要的是你设置帐户密码并更改脚本的权限。

一般来说,对于特别复杂的查询或大型表,直接对 PostgreSQL 使用 PL/pgSQL 更有意义。
你可以手动编写MySQL,也可以修改脚本看看是否可以。
上次客户要求使用PostgreSQL,说维护更容易。

Oracle数据库与PostgreSQL数据库的兼容性和集成

简单地说,集成 Oracle 和 PostgreSQL 的关键是:
1 .数据迁移:使用Ora2 pg工具,但需要手动调整数据类型映射。
2 . SQL兼容性:中间层处理语法差异,函数存储过程也必须优化。
3 .性能优化:分层设计,Oracle读,PostgreSQL写,按需路由。
4 、业务连续性:数据双写和版本控制,保证服务不停机。

描述必须存在,性能必须测试,监控必须做好。
这个案例不是简单的复制粘贴,它需要大量的设计,所以要小心。