postgres在结果行中执行sql

postgres在结果行中执行sql,sql,postgresql,select,exec,rows,Sql,Postgresql,Select,Exec,Rows,postgesql 9.6.17 有来自的结果行 它们包含一些命令,如 alter table ..... alter table ..... 如何像sql一样立即执行它们 SELECT EXEC SQL 'ALTER TABLE ' || tab_name || ' RENAME COLUMN ' || quote_ident(column_name) || ' TO ' || lower(quote_ident( column_name)) || ';' commi

postgesql 9.6.17

有来自的结果行

它们包含一些命令,如

alter table .....
alter table .....
如何像sql一样立即执行它们

SELECT
    EXEC SQL 'ALTER TABLE ' || tab_name || ' RENAME COLUMN '
    || quote_ident(column_name) || ' TO '
    || lower(quote_ident( column_name)) || ';' commit
FROM (
    SELECT
        quote_ident(table_schema) || '.' || quote_ident(table_name) as tab_name,
        column_name
    FROM information_schema.columns  
    WHERE 
            table_schema = 'public'
) sub;

但是例子↑ 失败

您可以使用DO语句执行此操作。如下所示:

DO $$
DECLARE rec TEXT;
BEGIN
  FOR r in SELECT
            'ALTER TABLE ' || tab_name || ' RENAME COLUMN '
            || quote_ident(column_name) || ' TO '
            || lower(quote_ident( column_name))
          FROM (
              SELECT
                  quote_ident(table_schema) || '.' || 
                  quote_ident(table_name) as tab_name,
                  column_name
                  FROM information_schema.columns  
              WHERE 
                   table_schema = 'public'
            ) sub
  LOOP
    EXECUTE rec;
  END LOOP;
END $$;
有关更多详细信息,请参阅以下链接:

我认为您的意思是执行
另外:您的代码不完整,无法测试。示例已完全完成。我想对我所有表的所有列名执行lower(),所以我得到了一个行中的alter table查询,但它是巨大的,我问,如何在sqljust please fix中执行它们,而不是SELECT中的r,SELECT中应该有rec