postgres 명령을 통해 스키마의 모든 테이블을 삭제하는 방법

저는 postgresql을 사용하고 스키마에있는 모든 테이블을 삭제해야합니다. 명령 프롬프트에서 어떻게 삭제할 수 있습니까?

답변

CASCADEDROP SCHEMA의 div> 옵션. 문서 :

CASCADE-스키마에 포함 된 개체 (테이블, 함수 등)를 자동으로 삭제합니다. 그리고 이러한 개체에 종속 된 모든 개체를 차례로 삭제합니다.

주의하십시오-저보다 강조합니다.

분명히 나중에 스키마를 다시 만들어야합니다.

현재 스키마의 모든 테이블을 삭제하려면 다음 스크립트를 사용할 수 있습니다.

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 $$; 

변경 WHERE schemaname = current_schema() 다른 스키마의 모든 테이블을 삭제하려는 경우

코멘트

  • DROP SCHEMA 스키마 이름 CASCADE를 사용할 때 오류 오류 : 구문 오류가 " DROP " 라인 2 : DROP 스키마
  • LINE 2? 1 행에있는 ' 무엇입니까?
  • 실제로 모든 ta를 삭제해야합니다. bles 및 종속 개체. 하지만 프로 시저와 모든 것을 삭제해서는 안됩니다.
  • 하지만 drop schema 명령을 사용하면 스키마도 삭제됩니다. 제 경우에는 스키마가 있어야합니다.
  • @asalthangam 답변 업데이트 됨

답변

yourdb=# DROP SCHEMA *schema_name* CASCADE; 

(Postgresql 9.6.3에서 방금 테스트했지만 이전 릴리스에서는 작동하지 않을 수 있음)

답변

@Techno Savvy

postgres 구문을 사용하여 테이블 삭제 :

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

결과 텍스트를 SQL 스크립트로 복사하거나 psql 터미널. 명령은 주석 처리되어 있습니다.

코멘트

  • 문제는 특정 스키마에서 테이블을 삭제하는 것이 었습니다.

답변

이 작업을 수행하는 아주 간단한 방법을 원한다면 .. 여기에 내가 과거에 사용한 스크립트가 있습니다.

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

스키마의 모든 테이블에 대한 일련의 삭제 명령을 인쇄합니다. 이 쿼리의 결과를 스풀링하고 실행합니다.

마찬가지로 더 많은 테이블을 지우려면 필요에 맞게 다음을 편집 할 수 있습니다.

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

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

댓글

  • 문제는 Oracle이 아니라 Postgres입니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다