[PostgreSQL] 참고 일치성을 유지하는 표에 대해CASCADE 옵션을 지정하지 않고 참고표를 삭제하면 어떻게 됩니까?
3203 단어 PostgreSQL
릴리즈
Host OS
Windows 10 Home
21H1(OS 빌드: 19043.1165)
Virtual Machine
WSL2
-
Remote OS
Ubuntu
20.04.2 LTS (GNU/Linux 5.4.72-microsoft-standard-WSL2 x86_64)
Database
PostgreSQL
12.7 (Ubuntu 12.7-0ubuntu0.20.04.1)
Database GUI
DBeaver
21.3.2.202112271055
Docker
없음
-
2. 의문과 대답
『 OSS-DB Silver 문제집을 철저히 공략합니다(Ver.2.0] 대응 』(= 흑본)에는 이런 말이 있다.
질문
참조 구속조건이 설정된 테이블 dumythb를 삭제하기 위해 다음 SQL 문이 실행되었습니다.dumytb는 참고표입니다.
DROP TABLE dummytb CASCADE;
(흑본 10장 문제19 해설p242)
Q: 참고 일치성을 유지하는 표에 대해 CASCADE 옵션을 지정하지 않고 참고 표를 삭제하면 어떻게 됩니까?
↓
A: 오류가 발생하여 테이블을 삭제할 수 없습니다.
3. 기본지식 정리
• 참조 제약 조건
녹본이 말한'외부 키 제약/참조 일치성 제약'(녹본 p225)을 참조하세요.
참조된 테이블의 열을 삭제/업데이트하는 방법은 녹본에 설명되어 있지만 참조된 테이블을 삭제하는 방법은 기록되어 있지 않습니다.
참조된 테이블의 열 삭제/업데이트
① 오류를 발생시키는 방법(참조된 테이블의 데이터를 변경하지 않음)
② 참조표의 열을 삭제/업데이트하는 동시에 참조표의 데이터를 삭제/업데이트하는 방법
라는 두 가지 선택을 했다.기본값은 ①입니다.
(참조: 녹본p227)
인용표 삭제
DROP TABLE 실행 시 CASCADE 옵션을 지정하여 참조 구속을 삭제합니다.(본 문제 답안)
4. 시도해보기
CASCADE 옵션을 지정하지 않으면 오류가 발생합니까?
↓
시험: WSL2로 샘플 데이터를 이동해 보세요!
견본을 만드는 탁자.(참조: 녹본p226)
PostgreSQL_(DBeaver_VSCode_WSL2(Ubuntu))
CREATE TABLE master ( id int PRIMARY KEY); ←被参照テーブル(id列=主キー)
CREATE TABLE tbl ( id int REFERENCES master(id)); ←参照テーブル(masterテーブルのid列を外部キーとする)
insert into master values (1);
insert into tbl VALUES(1);
참고 제한이 있는 책상이 완성되었습니다.(의문: DVBeaver의 조작에 관하여 상술한 네 마디를 한 마디씩 집행하였다.
나는 네 문장을 모두 연속해서 실행하는 방법을 찾아보았지만 찾지 못했다.
하나의 SQL 편집기에서 모든 SQL을 연속으로 실행하는 방법을 찾았습니다(Alt+X)
그리고 나서
① CASCADE 옵션 DROP 추가
② CASCADE 옵션이 없는 DROP
라는 두 가지 방법으로 행동을 확인한다.
① 참조 테이블에 CASCADE 옵션을 사용하여 DROP(질문문의 방법)
PostgreSQL_(DBeaver_VSCode_WSL2(Ubuntu))
DROP TABLE master CASCADE;
수행 결과↓ DROP TABLE 나왔습니다!② 테스트를 위해 tbl표도 미리 삭제한다.
DROP TABLE tbl;
이후 지난번과 같은 조건에 따라 마스터표와 tbl표를 한 번 더 제작한다.② CASCADE 옵션 없이 DROP 참조표
PostgreSQL_(DBeaver_VSCode_WSL2(Ubuntu))
DROP TABLE master;
실행 결과 ↓ 오류![잘못된 문구]
SQL 오류[2BP01]: ERROR: cannot drop table master because other objects dependonit
세부내용: constraint tblid_fkey on table tbl depends on table master
팁: Use DROP...CASCADE to drop the dependent objects too.
의지하기 때문에 DROP TABLE가 안돼요.
힌트도 CASCADE를 사용하는 것이 좋습니다.
오류가 발생하여 DROP TABLE를 진행할 수 없습니다.해결!
마스터 테이블과 tbl 테이블을 다시 삭제합니다. 완료.
미해결 질문
(GUI의 작업) Dbeaver를 통해 여러 SQL을 선택하고 연속적으로 실행하는 방법이 있습니까?
Dbeaver 작업
이번에 여러 개(4문)의 SQL을 집행할 때 한 마디 한 마디 집행했다.
나는 네 줄 전체를 선택하고 모든 것을 연속으로 집행하는 방법을 알고 싶다.
(한 SQL 편집기에서 쓴 SQL을 모두 연속으로 실행하는 방법(Alt+X)을 찾았습니다.)
Reference
이 문제에 관하여([PostgreSQL] 참고 일치성을 유지하는 표에 대해CASCADE 옵션을 지정하지 않고 참고표를 삭제하면 어떻게 됩니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ume-san/items/e22a0c9647a3871ec0af텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)