postgres выполнить sql в результирующих строках - PullRequest
0 голосов
/ 27 апреля 2020

postge sql 9.6.17

Есть строки результатов из Переименование нескольких столбцов в PostgreSQL

, они содержат некоторые команды, такие как

alter table .....
alter table .....

как немедленно выполнить c их в 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;

, но пример ↑ терпит неудачу

1 Ответ

1 голос
/ 27 апреля 2020

Вы можете использовать оператор 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 $$;

Для более подробной информации см. Следующую ссылку: https://www.postgresql.org/docs/9.6/sql-do.html

...