postgres 在结果行中执行 sql

postgres execute sql in resulting 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)) || ';' 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 $$;

有关更多详细信息,请参阅以下内容link: https://www.postgresql.org/docs/9.6/sql-do.html