1533 votes

Déposer toutes les tables postgresql?

Comment puis-je supprimer toutes les tables de postgresql, le travail à partir de la ligne de commande?

Je ne veux supprimer la base de données elle - même toutes les tables et toutes les données.

Merci.

1874voto

Derek Slife Points 3526

Si tous vos tableaux sont en un seul schéma, cette approche pourrait fonctionner (code ci-dessous suppose que le nom de votre schéma est "public")

drop schema public cascade;
create schema public;

570voto

Pablo Santa Cruz Points 73944

Vous pouvez écrire une requête pour générer un script SQL comme ceci:

select 'drop table "' || tablename || '" cascade;' from pg_tables;

Ou:

select 'drop table if exists "' || tablename || '" cascade;' from pg_tables;

Dans le cas où certaines tables sont automatiquement supprimées en raison d'option cascade dans une phrase précédente.

En outre, comme indiqué dans les commentaires, vous pouvez filtrer les tables que vous souhaitez déposer par le nom du schéma:

select 'drop table if exists "' || tablename || '" cascade;' 
  from pg_tables
 where schemaname = 'public'; -- or any other schema

Et puis l'exécuter.

Glorieux COPIER+COLLER.

366voto

User Points 6184

La plus acceptée de réponse à ce jour (janvier 2014):

drop schema public cascade;
create schema public;

Cela ne fonctionne toutefois, si votre intention est de restaurer le schéma public de son état vierge cela ne suffit pas à accomplir la tâche. Sous pgAdmin III for PostgreSQL 9.3.1, si vous cliquez sur le "public" schéma créé de cette façon, et de regarder dans le "volet SQL" vous verrez ce qui suit:

-- Schema: public

-- DROP SCHEMA public;

CREATE SCHEMA public
  AUTHORIZATION postgres;

Cependant, en revanche, une nouvelle base de données sont les suivantes:

-- Schema: public

-- DROP SCHEMA public;

CREATE SCHEMA public
  AUTHORIZATION postgres;

GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO public;
COMMENT ON SCHEMA public
  IS 'standard public schema';

Pour moi, en utilisant un framework web python qui crée des tables de base de données (web2py), à l'aide de l'ancien causé des problèmes:

<class 'psycopg2.ProgrammingError'> no schema has been selected to create in 

Donc, à mon sens, totalement réponse correcte est:

DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO public;
COMMENT ON SCHEMA public IS 'standard public schema';

(voir aussi la note à ces commandes à partir de pgAdmin III, je suis allé à l'Plugins-> PSQL Console)

96voto

LenW Points 1336

Comme par Pablo ci-dessus, il suffit de le déposer à partir d'un schéma spécifique, avec respect de la casse:

select 'drop table "' || tablename || '" cascade;' 
from pg_tables where schemaname = 'public';

59voto

Joe Van Dyk Points 2624
drop schema public cascade;

devrait faire l'affaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X