database - postgres - psql drop all tables in schema




Impossibile creare una nuova tabella dopo "DROP SCHEMA public" (2)

Il messaggio di errore si apre quando nessuno degli schemi nel tuo search_path può essere trovato.
O è mal configurato. Cosa ottieni per questo?

SHOW search_path;

Oppure hai eliminato lo schema public dal tuo template1 database di sistema standard1 . Potresti essere stato collegato al database sbagliato quando hai eseguito il drop schema public cascade;

Come suggerisce il nome, questo è il modello per la creazione di nuovi database. Pertanto, ogni nuovo database inizia senza lo schema (predefinito) public ora - mentre il tuo search_path predefinito probabilmente ha 'public' in esso.

Basta eseguire (come superutente public o vedere la risposta di mgojohn ):

CREATE SCHEMA public;

nel database template1 (o qualsiasi altro database dove ne hai bisogno).

Il consiglio con DROP SCHEMA ... CASCADE per distruggere rapidamente tutti gli oggetti in esso contenuti è altrimenti valido.

Dal momento che volevo far cadere alcuni tavoli e qualcuno ha suggerito il sotto e l'ho fatto:

postgres=# drop schema public cascade;
DROP SCHEMA
postgres=# create schema public;
CREATE SCHEMA

Poi ho avuto problemi durante la creazione di un nuovo database, come ad esempio:

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*

Puoi vedere che ho avuto un errore

ERRORE: nessuno schema è stato selezionato per creare in *

Come posso ripristinare lo schema pubblico?
Suggerisco che le persone non facciano mai "drop schema public cascade;" se non sappiamo come ripristinare. Qualcuno può aiutarmi?


Questo consiglio può causare problemi se si dispone di un utente dell'applicazione (come "postgres") ed eseguire i comandi DROP / CREATE come un utente diverso. Questo accadrebbe se, ad esempio, avessi effettuato l'accesso come "johndoe @ localhost" e semplicemente colpito psql mydatabase. Se lo fai, il proprietario del nuovo schema sarà johndoe, non "postgres" e quando la tua applicazione arriverà a creare le tabelle di cui ha bisogno, non vedrà il nuovo schema.

Per restituire la proprietà all'utente della tua applicazione (supponendo che l'utente sia "postgres"), puoi semplicemente eseguire (formare lo stesso prompt di psql dell'utente locale):

ALTER SCHEMA public OWNER to postgres;

e sarai tutto pronto.







sql-drop