PostgreSQL:如何遍历表列表并执行更新

时间:2018-11-20 17:52:22

标签: sql postgresql

我正在学习PostgreSQL,但偶然发现了一个非常基本的要求。 我想遍历一个表数组并更新一个特定的列(所有这些表中的列名都相同)。我的想法是将这些表名保存在数组中,并使用for循环遍历每个表并更新列。

这是我到目前为止所做的:

DO
$do$
DECLARE
  old_value varchar := 'old_value';
  new_value varchar := 'new_value';

  affected_table_names  TEXT[] := '{"table_1", "table_2"}';

BEGIN
  FOREACH tableName IN affected_table_names
    LOOP

      update tableName
      set column_name = old_value
      where column_name = new_value;

  END LOOP;
END
$do$;

但是,当我执行此pgAdmin4时,出现以下错误:

ERROR:  syntax error at or near "affected_table_names"
LINE 25:   FOR tableName IN affected_table_names
                                ^
********** Error **********

ERROR: syntax error at or near "affected_table_names"
SQL state: 42601
Character: 836

我不确定该如何解决该错误。我知道这是语法错误,因为它在这里这样说:https://www.postgresql.org/docs/8.1/errcodes-appendix.html

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

您将需要使用EXECUTE并构建一个包含查询的字符串。表名(或任何列名等)不属于查询的“可变”部分。您可以使用任何随机文本,查询可能/可能不起作用-查询计划者无法弄清其“形状”。

优良作法是使用该页面上的示例中所示的quote_ident函数。