7장. SQL: PostgreSQL 방식
이 작품은 AI를 사용하여 번역되었습니다. 여러분의 피드백과 의견을 환영합니다: translation-feedback@oreilly.com
편리한 구문 속기부터 기존 SQL의 한계를 뛰어넘는 아방가르드 기능까지 다양한 구문을 추가하여 선두 자리를 확고히 하고 있습니다. 이 장에서는 다른 데이터베이스에서는 흔히 볼 수 없는 몇 가지 SQL 관련 정보를 다룹니다. 이 장을 읽으려면 SQL에 대한 실무 지식이 있어야 합니다. 그렇지 않으면 PostgreSQL이 제공하는 노동력 절감 효과를 제대로 이해하지 못할 수도 있습니다.
조회수
잘 설계된 관계형 데이터베이스는 데이터를 정규화된 형태로 저장합니다. 흩어져 있는 테이블에서 이 데이터에 액세스하려면 기초 테이블을 조인하는 쿼리를 작성합니다. 같은 쿼리를 반복해서 작성해야 한다면 뷰를 만드세요. 간단히 말해, 뷰는 데이터베이스에 영구적으로 저장된 쿼리에 불과합니다.
일부 순수주의자들은 항상 테이블이 아닌 뷰를 쿼리해야 한다고 주장합니다. 즉, 직접 쿼리하려는 모든 테이블에 대해 뷰를 만들어야 한다는 뜻입니다. 간접적인 계층이 추가되면 권한 관리가 쉬워지고 테이블 데이터의 추상화가 용이해집니다. 이것은 올바른 조언이지만 게으름은 우리를 더 나쁘게 만듭니다.
PostgreSQL의 뷰는 수년에 걸쳐 발전해 왔습니다. 버전 9.3에서는 자동으로 업데이트 가능한 뷰를 선보였습니다. 뷰가 단일 테이블에서 가져오고 기본 키를 출력 열로 포함하는 경우, 뷰에 대해 직접 업데이트 명령을 실행할 수 있습니다. 기초 테이블의 데이터도 이에 따라 업데이트됩니다.
버전 9.3에는 구체화된 뷰도 도입되었습니다. 뷰를 구체화된 것으로 표시하면 REFRESH 명령을 실행할 때만 데이터를 쿼리합니다. 장점은 복잡한 쿼리를 반복적으로 실행하는 데 리소스를 낭비하지 않는다는 것이지만, 단점은 뷰를 사용할 때 최신 데이터가 없을 수 있다는 것입니다. 또한 일부 상황에서는 새로 고침 중에 뷰에 액세스할 수 없는 경우도 있습니다.
버전 9.4에서는 사용자가 새로 고침 중에 구체화된 보기에 액세스할 수 있습니다. 또한 뷰 범위를 벗어난 삽입 및 업데이트를 방지하는 수정자( WITH CHECK OPTION )가 도입되었습니다.
단일 테이블 뷰
가장 간단한 뷰는 단일 테이블에서 가져옵니다. 예 7-1에 표시된 것처럼 테이블에 데이터를 다시 쓰려면 항상 기본 키를 포함해야 합니다.
예 7-1. 단일 테이블 보기
CREATEORREPLACEVIEWcensus.vw_facts_2011ASSELECTfact_type_id,val,yr,tract_idFROMcensus.factsWHEREyr=2011;
버전 9.3부터 INSERT, UPDATE, 또는 DELETE명령을 사용하여 이 보기의 데이터를 변경할 수 있습니다. 업데이트 및 삭제는 뷰의 일부로 설정한 WHERE조건을 따릅니다. 예를 들어 다음 쿼리는 value 이 0인 레코드만 삭제합니다:
DELETEFROMcensus.vw_facts_2011 ...