use*_*336 35 database postgresql create-table database-schema sql-drop
因为我想删除一些表,有人建议如下,我做了:
postgres=# drop schema public cascade;
DROP SCHEMA
postgres=# create schema public;
CREATE SCHEMA
Run Code Online (Sandbox Code Playgroud)
然后我在创建新数据库时遇到问题,例如:
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*
Run Code Online (Sandbox Code Playgroud)
你可以看到我收到了错误
错误:未选择任何架构来创建*
如何恢复公共架构?
我建议人们永远不要做"drop schema public cascade"; 如果我们不知道如何恢复.有人可以帮帮我吗?
Erw*_*ter 29
当您search_path
找不到任何模式时,会弹出错误消息.
它配置错误.你得到了什么?
SHOW search_path;
Run Code Online (Sandbox Code Playgroud)
或者您public
从标准系统数据库中template1
删除了架构.您可能已经连接到错误的数据库,当你跑drop schema public cascade;
顾名思义,这是用于创建新数据库的模板.因此,现在每个新数据库都在没有(默认)架构的情况下启动public
- 而您的默认值search_path
可能在其中具有"公共".
刚运行(以超级用户身份public
或参见mgojohn的回答):
CREATE SCHEMA public;
Run Code Online (Sandbox Code Playgroud)
在数据库template1
(或您需要它的任何其他数据库)中.
DROP SCHEMA ... CASCADE
快速销毁其中所有对象的建议是有效的.
mgo*_*ohn 23
如果您有应用程序用户(如"postgres")并以不同的用户身份运行DROP/CREATE命令,那么该建议可能会造成一些麻烦.例如,如果您以"johndoe @ localhost"身份登录并只是点击psql mydatabase,就会发生这种情况.如果你这样做,新模式的所有者将是johndoe,而不是'postgres',当你的应用程序出现创建它需要的表时,它将看不到新的模式.
要将所有权归还给应用程序的用户(假设用户是'postgres'),您只需运行(与本地用户形成相同的psql提示符):
ALTER SCHEMA public OWNER to postgres;
Run Code Online (Sandbox Code Playgroud)
你会全力以赴.
归档时间: |
|
查看次数: |
25748 次 |
最近记录: |