首页 > 解决方案 > 用未绑定的 PostgreSQL 游标完全替换记录

问题描述

是否可以使用未绑定的游标来完全编辑和替换表中的一行?

我正在使用未绑定游标,因为该表是使用参数动态指定的,但由于未指定列,因此我不能使用“UPDATE table SET column = value WHERE”语法。

CREATE OR REPLACE FUNCTION trim_table(in_table TEXT) AS $$
  DECLARE
    ref REFCURSOR;
    current_row RECORD;
BEGIN
  OPEN ref FOR EXECUTE 'SELECT * FROM '|| quote_ident(in_table);
  LOOP
    FETCH ref INTO current_row;
    EXIT WHEN NOT FOUND;
    current_row = my_row_function(current_row);
    /*How can I replace my row here?*/
  END LOOP;
  CLOSE ref;
END
$$ LANGUAGE plpgsql;

我找到的所有示例和答案仅显示如何更新单个字段而不是完整记录。

标签: postgresqlsql-updatedatabase-cursor

解决方案


我认为这段代码可以在某些方面帮助你:

select 
    string_agg('UPDATE '||table_schema||'.'||table_name||chr(13)||' SET '||column_name||' = TRIM('||column_name||')', '; '||chr(13)) into query
from information_schema.columns
where data_type in ('varchar', 'text')
    and table_schema = 'your_schema'
    and table_name = 'your_table_name';

execute query;

把它放在你的过程中,修改它以方便你,你将不再需要这个循环。


推荐阅读