我有一个重新创建我的单元测试数据库的 sql 脚本。目前它与\i <path_to_my_script>
. 它就像
// create user, give him some priveleges
CREATE DATABASE my_database;
CREATE TABLE my_table (
id UUID primary key,
data json
);
但是my_table
是在postgres
数据库中创建的,而不是在my_database
.
我如何指定my_table
应在中创建my_database
?
我使用 postgresql 10.5。
在“psql”中,您可以使用元命令更改连接到的数据库
\c
。所以它看起来像这样:这适用于 '\i' 包含的文件。完成 \i 文件后,您将留在新数据库中,除非您执行某些操作以更改回旧数据库。
在 Postgres 中,您总是连接到一个特定的数据库。您的整个会话只处理那个数据库(又名目录)。
所以你不能在一个会话中创建和定义一个新的数据库/目录。创建空数据库然后填充它需要使用两个不同的连接在两个不同的阶段完成。
第一阶段:连接到一个现有的数据库,例如通常名为
postgres
. 执行你的CREATE DATABASE
声明。第二阶段:获得到这个新数据库的新连接。添加表定义。填充你的行。
我建议使用 Flyway 或 Liquibase 等数据库迁移工具来处理和执行 SQL 脚本来完成第二阶段的工作。