database - "DROP SCHEMA public"后无法创建新表

标签 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 "test" as user "postgres".
test=# create table hi(id int primary key);
*ERROR:  no schema has been selected to create in*

你可以看到我得到了错误

ERROR: no schema has been selected to create in*

如何恢复公共(public)模式?
我建议人们永远不要做“删除模式公共(public)级联”;如果我们不知道如何恢复。有人可以帮帮我吗?

最佳答案

当您的 search_path 中没有模式时,会弹出错误消息可以找到。
要么配置错误。你能得到什么?

SHOW search_path;

或者您从 standard system database template1 中删除了 public 模式.当您运行 drop schema public cascade;

时,您可能已连接到错误的数据库

顾名思义,这是创建新数据库的模板。因此,现在每个新数据库都没有(默认)架构 public - 而您的默认 search_path 可能包含“public”。

只需运行(作为 super 用户 public 或查看 mgojohn's answer ):

CREATE SCHEMA public;

在数据库 template1(或您需要的任何其他数据库)中。

使用 DROP SCHEMA ... CASCADE 快速销毁其中所有对象的建议在其他方面是有效的。

关于database - "DROP SCHEMA public"后无法创建新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14285854/

相关文章:

postgresql - 如何将 JSON 对象推送到 JSONB 列中的嵌套数组

c# - npgsql中的日期类型是什么?

database - 创建一个包含其他类型的自定义 PostgreSQL 类型?

sql-server - SQL查询搜索所有表的模式

mysql - 在mysql中选择最合适的数据类型

.net - 对于小型数据库驱动的应用程序,您会使用什么 RAD 环境或工具?

mysql - 在 Mac OS 上升级到 MySQL 5.7 后恢复数据库吗?

sql - 哪些代码在数据库中有对应关系

sql - 对查询的输出应用 DENSE_RANK()

postgresql - rdbms 查询中语言标签(小标签集)的有效方法