看标题也不难猜了,我这是因为要做数据脱敏,数据库使用的 postgres
以前给组织 A 做过的项目,现在几十个表,要求将所有表所有字段里出现的“组织 A”都替换成 XXX 。 尝试用了 Navicat 的模式查询,可以查到,但是改着不方便。 这个有简单点的办法吗
1
Te11UA 2021-01-28 11:28:12 +08:00 1
`UPDATE table SET 组织名字 = replace(组织名字, '组织 A', 'XXXX')`
这个? |
2
codingadog 2021-01-28 11:31:27 +08:00 via Android
把表导出成 excel 或 sql
然后全局搜索替换 然后重新导入 |
3
kaiki 2021-01-28 11:33:10 +08:00
也可以直接把查询到的需要修改的部分导出,用外部程序批量正则修改再进行更新
|
4
levelworm 2021-01-28 11:35:15 +08:00
应该可以查询到每张表每列的名字吧,然后做个小程序更新一下?
找了一下 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-01-28 11:38:43 +08:00
你需要用元数据的列记录 去拼接 SQL concat('REPLACE(',column_name','\'组织 A\',\'XXXX\') as ',column_name)
类似的操作去生成那个 SELECT 语句. select * from INFORMATION_SCHEMA.columns 你可以先看看这个 INFORMATION_SCHEMA 元数据库 |
7
iblessyou OP @codingadog 不行的,数据量比较大
|
8
iblessyou OP |
10
heysnakelis 2021-01-28 18:25:02 +08:00
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 |