스키마 - Amazon Redshift

스키마

데이터베이스에는 하나 이상의 명명된 스키마가 포함되어 있습니다. 데이터베이스의 각 스키마에는 테이블과 그 밖의 명명된 객체가 포함됩니다. 기본적으로 데이터베이스에는 PUBLIC이라는 이름의 스키마가 하나 있습니다. 스키마를 사용하여 일반 이름으로 데이터베이스 객체를 그룹화할 수 있습니다. 스키마는 중첩될 수 없다는 점만 빼면 파일 시스템 디렉터리와 비슷합니다.

같은 데이터베이스 내의 다른 스키마에서 동일한 데이터베이스 객체 이름을 충돌 없이 사용할 수 있습니다. 예를 들어 MY_SCHEMA와 YOUR_SCHEMA에 MYTABLE이라는 이름의 테이블이 모두 포함될 수 있습니다. 필요한 권한이 있는 사용자는 데이터베이스의 여러 스키마에서 객체에 액세스할 수 있습니다.

기본적으로 데이터베이스의 검색 경로의 첫 번째 스키마 내에서 객체가 생성됩니다. 자세한 내용은 이 섹션의 후반부에서 검색 경로 섹션을 참조하세요.

스키마는 다음과 같은 방법으로 다중 사용자 환경에서 조직 및 동시성 문제에 도움이 될 수 있습니다.

  • 여러 개발자가 서로 간섭 없이 같은 데이터베이스에서 작업이 가능.

  • 보다 관리하기 쉽게 데이터베이스 객체를 논리적 그룹으로 체계화.

  • 다른 애플리케이션에서 사용하는 객체의 이름과 충돌하지 않도록 객체를 별도의 스키마에 넣는 능력을 애플리케이션에 제공.

스키마 생성, 변경 및 삭제

모든 사용자는 직접 스키마를 생성하고 변경하거나 삭제할 수 있습니다.

다음 작업을 수행할 수 있습니다.

  • 스키마를 생성하려면 CREATE SCHEMA 명령을 사용합니다.

  • 스키마의 소유자를 변경하려면 ALTER SCHEMA 명령을 사용합니다.

  • 스키마와 그 객체를 삭제하려면 DROP SCHEMA 명령을 사용합니다.

  • 스키마 내에 테이블을 생성하려면 schema_name.table_name 형식으로 테이블을 생성합니다.

모든 스키마 목록을 보려면 PG_NAMESPACE 시스템 카탈로그 테이블을 쿼리합니다.

select * from pg_namespace;

스키마에 속한 테이블의 목록을 보려면 PG_TABLE_DEF 시스템 카탈로그 테이블을 쿼리합니다. 예를 들어 다음 쿼리는 PG_CATALOG 스키마에 있는 테이블의 목록을 반환합니다.

select distinct(tablename) from pg_table_def where schemaname = 'pg_catalog';

검색 경로

검색 경로는 쉼표로 분리된 스키마 이름 목록을 사용하여 search_path 파라미터에서 정의됩니다. 검색 경로는 테이블이나 함수와 같은 객체를 스키마 한정자가 포함되지 않은 단순한 이름으로 참조할 때 스키마가 검색되는 순서를 지정합니다.

대상 스키마를 지정하지 않고 생성된 객체는 검색 경로에 나열되는 첫 번째 스키마에 추가됩니다. 동일한 이름의 객체가 다른 스키마에 존재하는 경우, 스키마를 지정하지 않은 객체 이름은 검색 경로에서 해당 이름의 객체가 포함된 첫 번째 스키마를 참조합니다.

현재 세션의 기본 스키마를 변경하려면 SET 명령을 사용합니다.

자세한 내용은 구성 참조의 search_path 설명을 참조하세요.

스키마 기반 권한

스키마 기반 권한은 스키마 소유자에 의해 결정됩니다.

  • 기본적으로 모든 사용자는 데이터베이스의 PUBLIC 스키마에서 CREATE 및 USAGE 권한을 갖습니다. 사용자가 데이터베이스의 PUBLIC 스키마에 객체를 생성하는 것을 허용하지 않으려면 REVOKE 명령을 사용하여 해당 권한을 제거하세요.

  • 객체 소유자에 의해 USAGE 권한이 부여되지 않은 경우, 사용자는 소유하지 않은 스키마의 어떤 객체에도 액세스할 수 없습니다.

  • 다른 사용자가 생성한 스키마에 대한 CREATE 권한을 부여받은 사용자는 해당 스키마에서 객체를 만들 수 있습니다.