Postgrescreatedatabase默认情况下会添加另一个模式和public



研究生级别:
新手

SCENARIO
我正在学习一些Postgres教程,玩chinook数据库,我一定对search_path或用户role做了一些事情,因为现在每当我键入CREATE DATABASE时,默认情况下我都会得到两个模式publicchinook。我不知道为什么。

步骤

psql> CREATE DATABASE foo;
psql> c foo
psql (12.2, server 11.6)
You are now connected to database "foo" as user "username".
psql> dn
Name   |  Owner
---------+----------
chinook | username
public  | postgres
psql> dt chinook.*
List of relations
Schema  |     Name      | Type  | Owner
---------+---------------+-------+-------
chinook | album         | table | username
chinook | artist        | table | username
chinook | cars          | table | username
chinook | color         | table | username
chinook | commitlog     | table | username
chinook | customer      | table | username
chinook | employee      | table | username
chinook | genre         | table | username
chinook | invoice       | table | username
chinook | invoiceline   | table | username
chinook | mediatype     | table | username
chinook | playlist      | table | username
chinook | playlisttrack | table | username
chinook | track         | table | username

问题
一个全新的数据库会导致chinook模式及其所有表与'public模式一起被添加。

  1. 我想回到CREATE DATABASE foo只使用public模式创建数据库的时候。我不想要chinook架构。

  2. 我是怎么到这种地步的?

感谢

您必须修改了template1数据库。从模板上的文档:

CREATE DATABASE实际上是通过复制现有数据库来工作的。默认情况下,它复制名为template1的标准系统数据库。因此,该数据库是创建新数据库的"模板"。如果将对象添加到template1,这些对象将被复制到随后创建的用户数据库中。

您可以连接到该数据库并删除该架构:

$ psql -c "DROP SCHEMA chinook" template1

如果您现在创建一个新的数据库,它就不应该再包含此架构。

最新更新