PostgreSQL 使用脚本在不同的数据库下创建模式

PostgreSQL create a schema under a different database using a script

所以我想在这里做的是 运行 一个脚本,同时连接到我已经使用 pgAdmin3 的数据库。该脚本包含一个创建角色、表空间、数据库和一个创建模式以及该模式下的几个表。

这里的问题是,当我 运行 脚本时,它会正确创建新角色、表空间和数据库。它还正确地创建了模式和表,但有一个问题,模式是在数据库下创建的,我从中 运行 脚本,而不是新创建的数据库。脚本大致是这样的。

CREATE ROLE "new_role" ... ;

CREATE TABLESPACE "new_space"
  OWNER "new_role"
  LOCATION '/home/...';


CREATE DATABASE "new_db"
    WITH OWNER = "new_role"
            TABLESPACE = "new_space";

CREATE SCHEMA "schema" AUTHORIZATION "new_role" ;

CREATE TABLE IF NOT EXISTS "schema"."new_table"( 

...  
) TABLESPACE "new_space";...

...

我已经看到了一个带有 \connect foo; 的解决方案,但这不是我想要的,我希望它以某种方式在脚本中连接,而不需要 运行ning 单独和 运行ning \connect foo 在终端中。

任何人都可以告诉我是否有办法做到这一点并帮助我找到解决这个问题的方法吗?

使用 psql 并将其拆分为两个脚本。您可以将脚本保存在 .sql 文件中,然后 运行 psql 连接到您要 运行 每个脚本对所有的数据库相同的命令行(每个命令之间有 &&)。两个 psql 命令可以组合成一个 bash 脚本,因此您只需要一个命令 运行。

类似这样,如果脚本被命名为 foo.sql:

psql -X -h <host> -U <user> -p <port> -f foo.sql <db_name>

第一个脚本可以有 create rolecreate tablespacecreate database 命令,连接到 postgres 数据库或 模板 DB,第二个脚本可以包含其余命令。

您也可以使用 bash 脚本中的 createdb 而不是 CREATE DATABASE.

使用 pgAdminIV:
1- 右键单击​​默认数据库“postgres”
2- select 创建数据库,命名 f.e。 “新数据库”
3- 点击“newdatabase”(建立连接)
4- 打开查询工具
5- 导入、编写或粘贴您的代码
6- 运行 你的代码 f.e.: CREATE SCHEMA newschema;

对我有用...