postgresql - 更新多个表中的列

标签 postgresql plpgsql dynamic-sql information-schema

假设我在一个架构内的多个表中有一个名为partner的列:

select table_name from information_schema.columns where column_name = 'partner';

如何将值 partner = 100 的所有列更新为 partner = 101

最佳答案

对于一次性操作,执行动态 SQL 的 DO 语句应该可以正常工作:

DO
$do$
DECLARE
   _tbl text;
BEGIN
FOR _tbl  IN
    SELECT quote_ident(table_name)  -- escape identifier!
    FROM   information_schema.columns
    WHERE  table_schema = 'public'  -- your schema (!!)
    AND    column_name = 'partner'  -- your column name
LOOP
   RAISE NOTICE '%',
-- EXECUTE
  'UPDATE ' || _tbl || ' SET partner = 101 WHERE partner = 100';
END LOOP;
END
$do$

在注释 RAISE 并取消注释 EXECUTE 之前检查生成的代码。

这是此相关答案中更通用功能的一个很大程度上简化的版本,并带有更多说明:

信息模式还是系统目录?

关于postgresql - 更新多个表中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27527231/

相关文章:

php - 不能简单地使用 PostgreSQL 表名 ("relation does not exist")

postgresql - 如何将游标的表名作为函数参数传递?

sql - PL/pgSQL 函数在 pgAdmin 之外无法正确运行

mysql - MySQL中有没有类似于SQL Server中的sp_executesql的过程?

postgresql - 无法在 DDL 中使用声明的变量

postgresql - 如何根据属性值(而不是索引)更新匹配条件的 JSON 节点?

postgresql - 我可以从 Postgres 中的任意查询中获取类型吗?

postgresql - 如何将 PostgreSQL 转义字节转换为十六进制字节?

postgresql - 使用 plpgsql 获取函数内部当前函数的名称

postgresql - 如何查找 EnterpriseDB 中加载了哪些语言?