运行 不同架构下的相同脚本 - postgres

Run same script on under different schema - postgres

我有一个名为 populate.sql 的脚本,其中包含创建表。

CREATE TABLE "EXAMPLE" (
.................
..............
);
CREATE TABLE "BlaBla" (
..........
........
);
CREATE TABLE ...

此脚本创建了 20 多个表。我想 运行 这个 populate.sql 在不同的模式之上。假设我想在 schema1schema2schema3.

上 运行 这个脚本

那我就可以写了;

CREATE SCHEMA IF NOT EXISTS "schema1";
SET SCHEMA 'schema1';

populate.sql 上并在 one 架构上创建这些表。

如何在一个 psql 命令中在所有模式上创建这些表?

据我所知,我必须在 psql 上执行 FOR 循环并首先创建架构,然后在该架构之上创建表。

表将在当前设置 search_path 中创建(如果没有在创建语句中特别设置)。

您可以使用循环。在该循环中,您必须将搜索路径设置为您的模式。

DO 
$$
  DECLARE schemaname text;
BEGIN
    FOR i IN 1..3 LOOP

    schemaname := 'schema' || i::text;

    execute 'CREATE SCHEMA ' || schemaname;
    execute 'SET SCHEMA ' || schemaname;    
    execute 'SET search_path TO ' || schemaname;

    -- conent of populate.sql

  END LOOP;
END
$$;

如评论中 所述,您不能在此 do block 中调用外部脚本。因此,只有当你想扩展你的 populate.sql 文件并将这个 do block 包裹在它周围时,这个答案才有意义。