我是PostgreSQL的新手。实际上,我想将所有表中的所有电子邮件地址都更改为某个虚假的电子邮件地址。就像我希望abc@gmail.com变成abc @ 1234gmail.com,xyz @ hotmail.com变成xyz@1234hotmail.com,依此类推。
我找到了查询,该查询给出了其中包含电子邮件列的表。这是查询
select t.table_schema, t.table_name
from information_schema.tables t
inner join information_schema.columns c on c.table_name = t.table_name and c.table_schema = t.table_schema
where c.column_like '%email%'
and t.table_schema not in ('information_schema', 'pg_catalog')
and t.table_type = 'BASE TABLE'
order by t.table_schema;
它给了我一些记录。现在,一种方法是转到每个表并更改email列的值。但是我可以修改上面的查询以获取每封电子邮件的值并将其更改为假地址吗?就像电子邮件值是abc@gmail.com一样,只需在每个电子邮件地址的@符号后附加12345或任何值。因此,每个电子邮件的值将变为abc @ 1234gmail.com,xyz @ 1234hotmail.com等
答案 0 :(得分:0)
您可以为每列建立一组更新查询,如下所示-
select concat('update ', t.table_schema, '.', t.table_name, ' set ', c.column_name, ' = replace(', c.column_name, ', ''@'', ''@1234'') ')
from information_schema.tables t
inner join information_schema.columns c on c.table_name = t.table_name and c.table_schema = t.table_schema
where c.column_name like '%email%'
and t.table_schema not in ('information_schema', 'pg_catalog')
and t.table_type = 'BASE TABLE' order by t.table_schema;
此查询将为每列构建一个更新语句,该语句使用替换功能将“ @”替换为“ @ 1234”。我尚未对其进行全面测试,但希望它能为您提供一种使用方法。