因为我想放弃一些表,有人建议下面,我做到了:
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*
你可以看到我有错误
错误:没有模式已被选中创造*
我怎样才能恢复公共方案?
我建议人们永远不会做“降的模式的公共级联;” 如果我们不知道如何恢复。 有人可以帮我吗?
该错误消息弹出时没有在你的模式的search_path
可以找到。
无论是配置错误。 你会得到什么呢?
SHOW search_path;
或者你删除了public
从您的架构标准的系统数据库template1
。 你可能已经连接到当你跑错了数据库 drop schema public cascade;
正如其名称所暗示的,这是创建新数据库的模板。 因此,每一个新的数据库开始时没有(默认)模式public
现在-当你默认search_path
可能有“公共”在里面。
只要运行(如超级用户public
或看到mgojohn的答案 ):
CREATE SCHEMA public;
在数据库template1
(或者在你需要它的任何其他数据库)。
与建议DROP SCHEMA ... CASCADE
销毁所有对象很快否则有效。
这个建议可能会导致一些麻烦,如果你有一个应用程序的用户(如'Postgres的),然后运行DROP / CREATE命令为不同的用户。 如果,例如,你登录为“人johndoe @本地”,只是打PSQL MyDatabase的就会发生这种情况。 如果你这样做,新模式的店主会为johndoe,而不是“Postgres的,当你的应用程序走来创建它所需要的表,它不会看到新的架构。
为了给所有权回你的应用程序的用户(假设用户在'Postgres的),你可以简单地运行(形成同一PSQL提示为你的本地用户):
ALTER SCHEMA public OWNER to postgres;
你将所有设置。