-->

“DROP SCHEMA公开”后,无法创建新表(Cannot create a new table

2019-07-18 03:05发布

因为我想放弃一些表,有人建议下面,我做到了:

postgres=# drop schema public cascade;
DROP SCHEMA
postgres=# create schema public;
CREATE SCHEMA

然后,我创建一个新的数据库时,比如有问题:

postgres=# create database test;
CREATE DATABASE
postgres=# \c test
You are now connected to database "test" as user "postgres".
test=# create table hi(id int primary key);
*ERROR:  no schema has been selected to create in*

你可以看到我有错误

错误:没有模式已被选中创造*

我怎样才能恢复公共方案?
我建议人们永远不会做“降的模式的公共级联;” 如果我们不知道如何恢复。 有人可以帮我吗?

Answer 1:

该错误消息弹出时没有在你的模式的search_path可以找到。
无论是配置错误。 你会得到什么呢?

SHOW search_path;

或者你删除了public从您的架构标准的系统数据库template1 。 你可能已经连接到当你跑错了数据库 drop schema public cascade;

正如其名称所暗示的,这是创建新数据库的模板。 因此,每一个新的数据库开始时没有(默认)模式public现在-当你默认search_path可能有“公共”在里面。

只要运行(如超级用户public或看到mgojohn的答案 ):

CREATE SCHEMA public;

在数据库template1 (或者在你需要它的任何其他数据库)。

与建议DROP SCHEMA ... CASCADE销毁所有对象很快否则有效。



Answer 2:

这个建议可能会导致一些麻烦,如果你有一个应用程序的用户(如'Postgres的),然后运行DROP / CREATE命令为不同的用户。 如果,例如,你登录为“人johndoe @本地”,只是打PSQL MyDatabase的就会发生这种情况。 如果你这样做,新模式的店主会为johndoe,而不是“Postgres的,当你的应用程序走来创建它所需要的表,它不会看到新的架构。

为了给所有权回你的应用程序的用户(假设用户在'Postgres的),你可以简单地运行(形成同一PSQL提示为你的本地用户):

ALTER SCHEMA public OWNER to postgres;

你将所有设置。



文章来源: Cannot create a new table after “DROP SCHEMA public”