
看标题也不难猜了,我这是因为要做数据脱敏,数据库使用的 postgres
以前给组织 A 做过的项目,现在几十个表,要求将所有表所有字段里出现的“组织 A”都替换成 XXX 。 尝试用了 Navicat 的模式查询,可以查到,但是改着不方便。 这个有简单点的办法吗
1 Te11UA 2021 年 1 月 28 日 `UPDATE table SET 组织名字 = replace(组织名字, '组织 A', 'XXXX')` 这个? |
2 Duolingo 2021 年 1 月 28 日 via Android 把表导出成 excel 或 sql 然后全局搜索替换 然后重新导入 |
3 kaiki 2021 年 1 月 28 日 也可以直接把查询到的需要修改的部分导出,用外部程序批量正则修改再进行更新 |
4 levelworm 2021 年 1 月 28 日 应该可以查询到每张表每列的名字吧,然后做个小程序更新一下? 找了一下 Stackoverflow 有人做了个 Perl 的程序: https://stackoverflow.com/questions/29211779/how-can-i-change-all-occurrences-of-a-particular-value-in-any-column-in-postgres |
5 id4alex 2021 年 1 月 28 日 你需要用元数据的列记录 去拼接 SQL concat('REPLACE(',column_name','\'组织 A\',\'XXXX\') as ',column_name) 类似的操作去生成那个 SELECT 语句. select * from INFORMATION_SCHEMA.columns 你可以先看看这个 INFORMATION_SCHEMA 元数据库 |
7 iblessyou OP @codingadog 不行的,数据量比较大 |
10 heysnakelis 2021 年 1 月 28 日 SELECT TABLE_NAME, COLUMN_TYPE, COLUMN_NAME, CONCAT( 'select `',COLUMN_NAME,'` as data ,"',COLUMN_NAME,'" as column_name ,"',TABLE_NAME,'" as table_name from ', TABLE_NAME, ' where `', COLUMN_NAME, '` like "%关键字%" or `',COLUMN_NAME,'` like "%关键字%" ' , "UNION " ) FROM information_schema.`COLUMNS` WHERE TABLE_SCHEMA = 'test' 参考下,select 改成 update |