我正在学习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
有人能指出我正确的方向吗?
答案 0 :(得分:0)
您将需要使用EXECUTE并构建一个包含查询的字符串。表名(或任何列名等)不属于查询的“可变”部分。您可以使用任何随机文本,查询可能/可能不起作用-查询计划者无法弄清其“形状”。
优良作法是使用该页面上的示例中所示的quote_ident
函数。