因为我想删除一些桌子,有人建议了以下内容,我就这么做了:
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
中找不到任何模式时,会弹出错误消息。 search_path
配置错误。你能得到什么?
SHOW search_path;
或者您从
标准系统数据库public
中删除了 template1
模式。您运行时可能连接到了错误的数据库drop schema public cascade;
顾名思义,这是创建新数据库的默认模板。因此,现在每个新数据库开始时都没有默认模式
public
- 而您的默认 search_path
可能包含“public”。
只需以超级用户身份运行
postgres
(或参见mgojohn的答案):
CREATE SCHEMA public;
在数据库中
template1
(或您需要的任何其他数据库)。
使用
DROP SCHEMA ... CASCADE
快速销毁其中所有物体的建议是有效的。
如果您有应用程序用户(例如“postgres”)并以其他用户身份运行 DROP/CREATE 命令,则该建议可能会导致一些麻烦。例如,如果您以“johndoe@localhost”身份登录并简单地单击 psql mydatabase,就会发生这种情况。如果您这样做,新架构的所有者将是 johndoe,而不是“postgres”,当您的应用程序创建它需要的表时,它不会看到新架构。
要将所有权归还给应用程序的用户(假设用户是“postgres”),您只需运行(形成与本地用户相同的 psql 提示符):
ALTER SCHEMA public OWNER to postgres;
一切都准备好了。