Database 无法在“之后创建新表”;删除“公共模式”;

Database 无法在“之后创建新表”;删除“公共模式”;,database,postgresql,database-schema,create-table,sql-drop,Database,Postgresql,Database Schema,Create Table,Sql Drop,因为我想放下一些桌子,有人提出了以下建议,我做到了: 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 "t

因为我想放下一些桌子,有人提出了以下建议,我做到了:

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*
你可以看到我犯了错误

错误:未选择要在中创建的架构*

如何恢复公共架构?

如果我们不知道如何恢复,我建议人们永远不要“删除模式公共级联”。有人能帮我吗?

当您的数据库中找不到任何模式时,会弹出错误消息。
要么是配置错误。你得到了什么

SHOW search_path;
或者,您从数据库中删除了
public
架构。运行
drop schema public cascade时,可能连接到了错误的数据库

顾名思义,这是创建新数据库的模板。因此,每个新数据库现在都没有(默认)模式
public
,而默认的
search\u路径可能包含“public”

只需运行(作为超级用户
public
或查看):

在数据库
模板1
(或您需要的任何其他数据库)中


使用
删除架构的建议。。。级联
以快速销毁其中的所有对象在其他方面是有效的。

如果您有一个应用程序用户(如“postgres”)并以其他用户身份运行DROP/CREATE命令,则该建议可能会导致一些问题。例如,如果您以johndoe@localhost只需点击psqlmydatabase。如果您这样做,新模式的所有者将是johndoe,而不是“postgres”,当您的应用程序开始创建它所需的表时,它将看不到新模式

要将所有权返还给应用程序的用户(假设用户是“postgres”),只需运行(与本地用户形成相同的psql提示符):


你会准备好的。

太好了!非常感谢你!是的,在我运行“创建公共架构;”之后在template1中,我可以在公共架构中创建新数据库。@user1342336:Cool.:)需要明确的是:
模式
数据库中,而不是相反。数据库集群->数据库->模式->表格。太棒了!非常感谢你为我澄清这一点!
CREATE SCHEMA public;
ALTER SCHEMA public OWNER to postgres;