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.

asalthangam
sumber

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.

Philᵀᴹ
sumber
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)

comte
sumber
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.

cih
sumber
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

Techno Savvy
sumber
3
Pertanyaannya adalah Postgres, bukan Oracle.
Philᵀᴹ