postgres在结果行中执行sql
postgesql 9.6.17 有来自的结果行 它们包含一些命令,如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
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