我有一个PostgreSQL 9.1数据库,其中大约有100个表被加载到"public"模式中.我想将这些表(但不是"public"中的所有函数)移动到"data"模式.

我知道我可以使用以下方法一次移动一张桌子.

ALTER TABLE [tablename] SET SCHEMA [new_schema]

是否可以在一次操作中将所有表移动到新模式?如果是这样,完成这项任务最有效的方式是什么?

推荐答案

DO就可以了:

DO
$$
DECLARE
    row record;
BEGIN
    FOR row IN SELECT tablename FROM pg_tables WHERE schemaname = 'public' -- and other conditions, if needed
    LOOP
        EXECUTE 'ALTER TABLE public.' || quote_ident(row.tablename) || ' SET SCHEMA [new_schema];';
    END LOOP;
END;
$$;

Postgresql相关问答推荐

跳过DLC中的某些类型的 node

更新带有视图的表并在关系员工的规则中检测到无限的回归"

从子查询中的排序结果中获取前X行

如何使用postgr sql regex删除重复项和inc表记录

无法继承BYPASSRLS

让Docker Compose Container等待容器PostgreSQL并恢复

如何将 jackc/pgx 与连接池、上下文、准备好的语句等一起使用

如何在 MockDataProvider 中创建自定义 JOOQ 记录?

错误:分区表的唯一约束必须包括所有分区列

如何在postgresql中按时间查询

使用间隔参数的 go postgres 准备好的语句不起作用

如何获得区间的绝对值

Select 中的 PostgreSQL 正则表达式捕获组

在 PostgreSQL 中显示正在运行的查询的全文

SqlAlchemy:多列的不同计数

如何使用 Node.js 和 Postgresql 找到最后一个插入 ID?

从长时间的postgres转换日期

在 postgres 中插入语句用于没有时区 NOT NULL 的数据类型时间戳,

如何在 postgres 查询中排名

PostgreSQL 多种认证方式