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

时间:2015-03-22 16:46:26

标签: sql database postgresql schema relational-database

所以我想在这里做的是在连接到我已经使用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;的解决方案,但这不是我想要的,我希望它能够以某种方式连接脚本,而无需单独运行并在终端中运行\connect foo

有人可以告诉我是否有这样做并帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

使用psql并将其拆分为两个脚本。您可以将脚本保存在.sql文件中,然后运行 psql 以连接到要在同一命令行上运行每个脚本的数据库(使用&& in每个命令之间)。这两个 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

答案 1 :(得分:0)

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

它对我有用...