Postgres Function To Update Column By Data Type of Text
我正在尝试在 Postgres 中创建一个函数来查找具有文本数据类型的架构(架构是用户可以传入的文本变量)中的所有列,循环遍历每个返回的记录,然后更新文本列带有特定数据。
这是我的函数示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | CREATE OR REPLACE FUNCTION update_text_columns_newline(target_schema text) RETURNS void AS $$ DECLARE r information_schema.columns%ROWTYPE; SQL text := ' '; BEGIN FOR r IN SELECT table_schema, TABLE_NAME, column_name FROM information_schema.columns WHERE UPPER(data_type) = 'TEXT' AND UPPER(table_schema) = target_schema LOOP _sql = _sql + ' UPDATE ' || r.table_schema || '.' || r.table_name || ' SET ' || r.column_name || ' = REPLACE(r.column_name, _new_line_character, CHR(10));'; END LOOP; EXECUTE _sql; END; $$ LANGUAGE plpgsql; |
循环似乎没有从查询中返回值,我的 _sql 语句始终为空。
在条件的两侧制作上边
1 | UPPER(table_schema) = UPPER(target_schema) |
我认为这里的问题是您的查询中的
函数中的另一个位置是
我找不到
我暂时修复它如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | CREATE OR REPLACE FUNCTION update_text_columns_newline(target_schema text) RETURNS void AS $$ DECLARE r information_schema.columns%ROWTYPE; _sql text := ' '; _new_line_character VARCHAR; BEGIN FOR r IN SELECT table_schema, TABLE_NAME, column_name FROM information_schema.columns WHERE UPPER(data_type) = 'TEXT' AND UPPER(table_schema) = UPPER(target_schema) LOOP _sql = _sql + ' UPDATE ' || quote_ident(r.table_schema) || '.' || quote_ident(r.table_name) || ' SET ' || quote_ident(r.column_name) || ' = REPLACE(' || quote_ident(r.column_name) || ', ' || quote_literal(_new_line_character) || ', CHR(10));'; END LOOP; EXECUTE _sql; END; $$ LANGUAGE plpgsql; |
关于