我有一个名为populate.sql
的脚本,其中包含创建表。
CREATE TABLE "EXAMPLE" (
.................
..............
);
CREATE TABLE "BlaBla" (
..........
........
);
CREATE TABLE ...
此脚本创建超过20个表。我想在不同的模式之上运行此populate.sql
。我们想说我想在schema1
,schema2
和schema3
上运行此脚本。
然后我可以写;
CREATE SCHEMA IF NOT EXISTS "schema1";
SET SCHEMA 'schema1';
在populate.sql
上并在一个架构上创建这些表。
如何在一个psql命令中的所有模式上创建这些表?
据我觉得我必须在psql上做FOR LOOP并首先创建模式并在该方案之上创建表。
答案 0 :(得分:1)
将在当前设置的search_path中创建表(如果没有在create语句中特别设置)。
你可以使用一个循环。在该循环中,您必须将搜索路径设置为模式。
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
$$;
您无法在评论中a_horse_with_no_name提及此do block
内的外部脚本。因此,只有当您想要扩展populate.sql
文件并将其do block
包裹起来时,此答案才有意义。