from - show tables database postgres
No se puede crear una tabla nueva después de "DROP SCHEMA public" (2)
El mensaje de error aparece cuando no se puede encontrar ninguno de los esquemas en su search_path
.
O está mal configurado. ¿Qué obtienes por esto?
SHOW search_path;
O eliminó el esquema public
de su template1
base de datos del sistema estándar1 . Es posible que haya estado conectado a la base de datos incorrecta cuando ejecutó drop schema public cascade;
Como su nombre indica, esta es la plantilla para crear nuevas bases de datos. Por lo tanto, cada nueva base de datos comienza sin el esquema (predeterminado) public
ahora, mientras que su search_path
predeterminada probablemente tenga "público".
Simplemente ejecute (como superusuario public
o vea la respuesta de mgojohn ):
CREATE SCHEMA public;
en la base de datos template1
(o cualquier otro db donde lo necesite).
El consejo con DROP SCHEMA ... CASCADE
para destruir rápidamente todos los objetos que DROP SCHEMA ... CASCADE
es válido.
Como quería dejar algunas mesas, alguien sugirió lo siguiente y lo hice:
postgres=# drop schema public cascade;
DROP SCHEMA
postgres=# create schema public;
CREATE SCHEMA
Luego tuve un problema al crear una nueva base de datos, como:
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*
Puedes ver que recibí un error
ERROR: no se ha seleccionado ningún esquema para crear en *
¿Cómo puedo restaurar el esquema público?
Sugiero que la gente nunca haga "caer esquema público en cascada"; si no sabemos cómo restaurar alguien me puede ayudar?
Ese consejo puede causar algunos problemas si tiene un usuario de la aplicación (como ''postgres'') y ejecuta los comandos DROP / CREATE como un usuario diferente. Esto sucedería si, por ejemplo, inicias sesión como ''johndoe @ localhost'' y simplemente presionas la base de datos psql. Si lo hace, el nuevo propietario del esquema será johndoe, no "postgres" y cuando su aplicación aparezca para crear las tablas que necesita, no verá el nuevo esquema.
Para devolverle la propiedad al usuario de su aplicación (asumiendo que el usuario es ''postgres''), simplemente puede ejecutar (desde el mismo indicador de psql que su usuario local)
ALTER SCHEMA public OWNER to postgres;
y estará todo listo.