Postgresql 用另一个字符串替换整个表上的字符串的最佳方法是什么?

Postgresql 用另一个字符串替换整个表上的字符串的最佳方法是什么?,postgresql,replace,postgresql-9.1,postgresql-9.2,Postgresql,Replace,Postgresql 9.1,Postgresql 9.2,我的问题类似于下面的问题,但我想将其替换为任何列: 例如-在整个表(所有行)中将cat的所有实例替换为dog 我希望下面的查询对所有列都有效(不在更新查询中指定列名) 这实际上似乎不起作用 有什么建议吗???UPDATE不是这样的。您需要使用column=value表达式指定要更改的每一列,并用逗号分隔 i、 e 这里有更多的信息,包括语法。您必须编写一些代码。您需要检索所有表的名称以及所有文本名称: select distinct table_name, column_name from i

我的问题类似于下面的问题,但我想将其替换为任何列:

例如-在整个表(所有行)中将cat的所有实例替换为dog

我希望下面的查询对所有列都有效(不在更新查询中指定列名)

这实际上似乎不起作用


有什么建议吗???

UPDATE
不是这样的。您需要使用
column=value
表达式指定要更改的每一列,并用逗号分隔

i、 e


这里有更多的信息,包括语法。

您必须编写一些代码。您需要检索所有表的名称以及所有文本名称:

select distinct table_name, column_name from information_schema.columns
    where table_schema='public'
and (data_type like 'char%' or data_type='text')
order by table_name, column_name;
然后为每个表/列组合构建一个查询以进行替换:

myQuery = "update " + table_name +
    " set " + column_name + " = replace(" + column_name +
    ", 'old_val', 'new_val')"
。。。然后用您使用的任何语言执行查询。你可以用plpgsql写这个,但说真的,不要。这是一段非常危险的代码

如果你想在Wordpress或Drupal网站上这样做,请访问以下人员:

试着这样做

create or replace function f1(_table text,_oldVal text,_newVal text) returns void as 
$$
declare 
rw record;
begin
for rw in 
    select 'UPDATE '||$1||' SET '||C.COLUMN_NAME||' = REPLACE ('||C.COLUMN_NAME||','''||$2||''','''||$3||'''); ' QRY
    FROM (select column_name from information_schema.columns where table_schema='public' and table_name =$1)c
loop
    EXECUTE rw.QRY;
end loop;
end;
$$language plpgsql
打电话

select f1('sample','A','Z')

select * from sample 


你真的想改变列名吗?像alter表查询?或者只是行的内容?我不想更改列名。只是想替换行的内容。是的,这可能是更新中指定列名的限制。我想了解专家视图,就好像有任何不指定列名的复杂方法来实现它一样,这将使我的任务更容易。正如其他两个答案所提到的,您可以动态生成SQL,但我不确定我是否得到了您要找的用例。你想将一个表中的所有列都设置为完全相同的值吗?哎呀,我认为这是指所有表,而不仅仅是一个表。如果需要,您可以将上面的第一个查询更改为包含“where table_name='mytable'”。完美!!这就是我要找的。谢谢你,瓦查尔。我现在可以扩展它,从另一个表中选择旧的val,新的val对(比如sample_1,它有这两列,每个值都是唯一的)。最终目标是通过从sample_1表中选取新值来替换表“sample”中的所有旧值。我正在考虑将所有新旧值映射对作为hstore,然后在“Update”查询中适当地循环它。这行吗,还是你有更好的建议?
create table sample (s varchar,s1 varchar,s2 varchar,s3 varchar,s4 varchar);

insert into sample values ('A','A','A','A','A');
insert into sample values('AB','AB','A','AB','AB');
insert into sample values('A','AB','A','AB','A');
insert into sample values('CA','A','A','CA','CA');

select * from sample 
create or replace function f1(_table text,_oldVal text,_newVal text) returns void as 
$$
declare 
rw record;
begin
for rw in 
    select 'UPDATE '||$1||' SET '||C.COLUMN_NAME||' = REPLACE ('||C.COLUMN_NAME||','''||$2||''','''||$3||'''); ' QRY
    FROM (select column_name from information_schema.columns where table_schema='public' and table_name =$1)c
loop
    EXECUTE rw.QRY;
end loop;
end;
$$language plpgsql
select f1('sample','A','Z')

select * from sample 
do 
$$
declare 
rw record;
begin
for rw in 
    select 'UPDATE sample SET '||C.COLUMN_NAME||' = REPLACE ('||C.COLUMN_NAME||',''Z'',''A''); ' QRY
    FROM (select column_name from information_schema.columns where table_schema='public' and table_name ='sample')c
loop
    EXECUTE rw.QRY;
end loop;
end;
$$;

select * from sample