Postgres创建数据库默认情况下将其他模式与public添加在一起

问题描述 投票:0回答:1

Postgres等级:新手

SCENARIO我正在阅读一些Postgres教程并使用chinook database,我必须对search_path或用户role做一些事情,因为现在每当我输入CREATE DATABASE时,默认情况下我都会得到2个模式publicchinook。我不知道为什么。

STEPS

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. 我如何解决这种情况?

谢谢

postgresql database-schema
1个回答
0
投票

您必须已经修改了template1数据库。从docs on templates

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

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

$ psql -c "DROP SCHEMA chinook" template1

如果现在创建一个新数据库,它将不再包含此架构。

© www.soinside.com 2019 - 2024. All rights reserved.