postgres cara menjatuhkan semua tabel dalam skema melalui perintah


10

Saya menggunakan postgresql dan saya harus menghapus semua tabel yang ada dalam skema. Bagaimana saya bisa menghapus dari command prompt.

Jawaban:


17

Anda ingin menggunakan CASCADEopsi DROP SCHEMA. Dari dokumentasi :

CASCADE - Secara otomatis menjatuhkan objek (tabel, fungsi, dll.) Yang terkandung dalam skema, dan pada gilirannya semua objek yang bergantung pada objek tersebut

HATI-HATI - penekanan di atas tambang.

Jelas Anda harus membuat ulang skema setelahnya.

Untuk hanya membuang semua tabel dalam skema saat ini, Anda dapat menggunakan skrip ini:

DO $$ DECLARE
    tabname RECORD;
BEGIN
    FOR tabname IN (SELECT tablename 
                    FROM pg_tables 
                    WHERE schemaname = current_schema()) 
LOOP
    EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(tabname.tablename) || ' CASCADE';
END LOOP;
END $$;

Ubah WHERE schemaname = current_schema()jika Anda ingin menjatuhkan semua tabel dalam skema yang berbeda.


ketika saya menggunakan schemame DROP SCHEMA CASCADE; saya mendapat galat ERROR: galat sintaks di atau dekat "DROP" LINE 2: DROP Schema
asalthangam

2
LINE 2? Apa yang ada di saluran 1?
Philᵀᴹ

sebenarnya saya harus drop semua tabel dan objek dependennya. tetapi seharusnya tidak menghapus prosedur dan semua ..
asalthangam

tetapi ketika saya menggunakan perintah drop schema itu menghapus skema juga. dalam kasus saya, skema harus ada
asalthangam

@asalthangam jawaban diperbarui
Philᵀᴹ

3
yourdb=# DROP SCHEMA *schema_name* CASCADE;

(berfungsi, baru saja diuji dengan Postgresql 9.6.3, mungkin tidak berfungsi dengan rilis sebelumnya)


1

@ Techno Savvy

Jatuhkan tabel menggunakan sintaks postgres:

select '-- drop table ' || tablename || ' cascade;' from pg_tables 
where tablename not like 'pg%' and tablename not like 'sql%';

Salin teks yang dihasilkan ke skrip sql atau terminal psql. Perhatikan bahwa perintah dikomentari.


Pertanyaannya adalah tentang menjatuhkan tabel dalam skema tertentu, saya pikir.
mustaccio

-2

Jika Anda hanya ingin cara yang sangat sederhana untuk melakukan ini .. Ini adalah skrip yang saya gunakan di masa lalu

select 'drop table '||table_name||' cascade constraints;' from user_tables;

Ini akan mencetak serangkaian perintah drop untuk semua tabel dalam skema. Spool hasil dari query ini dan jalankan.

Demikian juga jika Anda ingin menghapus lebih dari tabel, Anda dapat mengedit berikut ini sesuai dengan kebutuhan Anda

select 'drop '||object_type||' '|| object_name || ';' from user_objects where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX')

Sumber: https://forums.oracle.com/forums/thread.jspa?threadID=614090


3
Pertanyaannya adalah Postgres, bukan Oracle.
Philᵀᴹ
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.