apostgresql데이터베이스 클러스터 하나 이상의 명명 된 데이터베이스가 포함되어 있습니다. 사용자 및 사용자 그룹 전체 클러스터에서 공유되지만 다른 데이터는 공유되지 않습니다. 데이터베이스 전체. 서버에 대한 특정 클라이언트 연결은 할 수 있습니다 단일 데이터베이스에서 데이터 만 액세스하는 것입니다. 연결 요청.
참고 :클러스터 사용자가 반드시 가지고있는 것은 아닙니다 클러스터의 모든 데이터베이스에 액세스 할 수있는 권한. 사용자 이름을 공유한다는 것은 다르기가 없다는 것을 의미합니다. 명명 된 사용자,Joe동일한 클러스터의 데이터베이스; 그러나 시스템은 될 수 있습니다 허용 구성Joe액세스 일부 데이터베이스 만.
데이터베이스에는 하나 이상의 이름이 포함되어 있습니다토토 꽁 머니. 토토 꽁 머니 또한 데이터 유형을 포함하여 다른 종류의 명명 된 객체도 포함합니다. 기능 및 연산자. 동일한 개체 이름을 사용할 수 있습니다 갈등이없는 다른 토토 꽁 머니; 예를 들어, 둘 다토토 꽁 머니 1andmyschemacan 이름이 포함 된 테이블 포함mytable. 같지 않은 데이터베이스, 토토 꽁 머니는 엄격하게 분리되지 않았습니다. 사용자가 액세스 할 수 있습니다. 그가 연결된 데이터베이스의 토토 꽁 머니의 객체 그가 그렇게 할 특권이 있다면.
사용하려는 몇 가지 이유가 있습니다. 토토 꽁 머니 :
많은 사용자가 하나의 데이터베이스없이 하나의 데이터베이스를 사용할 수 있도록합니다 서로 방해합니다.
데이터베이스 개체를 논리 그룹으로 구성 할 수 있습니다 더 관리 가능합니다.
타사 응용 프로그램은 별도의 토토 꽁 머니에 넣을 수 있습니다 그래서 그들은 다른 개체의 이름과 충돌 할 수 없습니다.
토토 꽁 머니는 운영 체제의 디렉토리와 유사합니다 토토 꽁 머니를 중첩 할 수 없다는 점을 제외하고 레벨.
토토 꽁 머니를 만들려면를 사용하십시오.토토 꽁 머니 만들기명령. 줘 토토 꽁 머니 선택한 이름. 예를 들어:
토토 꽁 머니 생성 myschema;
토토 꽁 머니에서 개체를 작성하거나 액세스하려면 a 쓰기적격 이름토토 꽁 머니 이름으로 구성되어 있습니다 그리고 점으로 분리 된 테이블 이름 :
토토 꽁 머니.테이블
이것은 다음을 포함하여 테이블 이름이 예상되는 곳에서 작동합니다. 테이블 수정 명령 및 데이터 액세스 명령 다음 장에서 논의했습니다. (간결하게 우리는 말할 것입니다 테이블의 경우에만이지만 동일한 아이디어는 다른 종류의 다른 종류에 적용됩니다. 유형 및 함수와 같은 명명 된 개체.)
실제로 더 일반적인 구문
데이터베이스.토토 꽁 머니.테이블
도 사용할 수 있지만 현재는입니다.Pro FormaSQL 표준 준수. 데이터베이스 이름을 작성하는 경우와 동일해야합니다. 연결된 데이터베이스.
새 토토 꽁 머니에서 테이블을 만들려면 다음을 사용합니다.
테이블 작성 myschema.mytable ( ... );
비어 있으면 토토 꽁 머니를 삭제하려면 드롭), 사용 :
토토 꽁 머니 DROP MYSCHEMA;
포함 된 모든 객체를 포함하여 토토 꽁 머니를 삭제하려면 사용 :
토토 꽁 머니 DROP SCHEMA MYSCHEMA CASCADE;
참조토토 꽁 머니 : 문서 : 8.3 : 종속성 추적a 이 뒤에있는 일반적인 메커니즘에 대한 설명
종종 다른 사람이 소유 한 토토 꽁 머니를 만들고 싶습니다. (이것은 활동을 제한하는 방법 중 하나이기 때문에 사용자가 잘 정의 된 네임 스페이스를 사용하십시오). 그것에 대한 구문 이다:
토토 꽁 머니 만들기Schemaname승인사용자 이름;
토토 꽁 머니 이름을 생략 할 수도 있습니다.이 경우 토토 꽁 머니 이름은 사용자 이름과 동일합니다. 보다섹션 5.7.6이것이 유용 할 수있는 방법.
토토 꽁 머니 이름으로 시작하는PG_are 시스템 목적으로 예약되어 있으며 작성할 수 없습니다 사용자.
이전 섹션에서는 테이블이없는 테이블을 만들었습니다 토토 꽁 머니 이름을 지정합니다. 기본적으로 그러한 테이블 (및 기타 객체)는 자동으로라는 토토 꽁 머니에 넣습니다."public". 모든 새로운 데이터베이스에는 그러한 부분이 포함되어 있습니다 개요. 따라서 다음은 동일합니다.
테이블 제품 생성 (...);
및 :
테이블 생성 public.products (...);
자격을 갖춘 이름은 지루하고 종종 최고입니다. 어쨌든 특정 토토 꽁 머니 이름을 응용 프로그램에 연결하지 마십시오. 따라서 테이블은 종종에 의해 언급됩니다.자격이없는 이름테이블 이름. 시스템은 어떤 테이블이 의미하는지 결정합니다 다음검색 경로, a 살펴볼 토토 꽁 머니 목록. 첫 번째 일치 테이블 검색 경로는 원하는 사람으로 간주됩니다. 일치하지 않는 경우 검색 경로에서 일치하더라도 오류 가보고됩니다. 테이블 이름은 데이터베이스의 다른 토토 꽁 머니에 존재합니다.
검색 경로에 명명 된 첫 번째 토토 꽁 머니를 현재 토토 꽁 머니. 첫 번째 토토 꽁 머니가 검색되는 것 외에도, 그것 또한이면 새 테이블이 만들어지는 토토 꽁 머니입니다.테이블 만들기명령이 지정되지 않습니다 토토 꽁 머니 이름.
현재 검색 경로를 표시하려면 다음을 사용하십시오 명령:
show search_path;
기본 설정 에서이 반환이 반환됩니다.
search_path -------------- "$ user", public
첫 번째 요소는 동일한 이름을 가진 토토 꽁 머니를 지정합니다. 현재 사용자를 검색해야합니다. 그러한 토토 꽁 머니가없는 경우 입력이 무시됩니다. 두 번째 요소는 우리가 이미 본 공공 토토 꽁 머니.
존재하는 검색 경로의 첫 번째 토토 꽁 머니는 다음과 같습니다. 새 개체를 만드는 기본 위치. 그것이 이유입니다 기본적으로 객체는 공개 토토 꽁 머니에서 생성됩니다. 언제 객체는 토토 꽁 머니없이 다른 컨텍스트에서 참조됩니다 자격 (테이블 수정, 데이터 수정 또는 쿼리 명령) 검색 경로는 일치하는 객체가 될 때까지 트래버스됩니다. 발견됩니다. 따라서 기본 구성에서 자격이없는 액세스는 다시 대중에게만 언급 할 수 있습니다 개요.
새로운 토토 꽁 머니를 경로에 넣으려면 다음을 사용합니다.
Search_Path를 MySchema, public;에 설정하십시오.
(우리는 생략$ user여기서 우리 즉각적인 필요가 없습니다.) 그리고 우리는 액세스 할 수 있습니다. 토토 꽁 머니 자격이없는 테이블 :
드롭 테이블 mytable;
이후myschema첫 번째입니다 경로의 요소, 새로운 객체는 기본적으로 그것.
우리는 또한 다음과 같이 썼을 수도 있습니다.
search_path를 myschema로 설정하십시오;
그러면 우리는 더 이상 공개 토토 꽁 머니에 액세스 할 수 없습니다. 명백한 자격. 에 대해서는 특별한 것이 없습니다 기본적으로 존재한다는 것을 제외하고 공개 토토 꽁 머니. 그럴 수 있습니다 도 떨어졌다.
참조PostgreSQL : 문서 : 8.3 : 시스템 토토 사이트 토토 사이트토토 꽁 머니 검색 경로를 조작하는 다른 방법.
검색 경로는 데이터 유형 이름과 동일한 방식으로 작동합니다. 테이블 이름과 마찬가지로 함수 이름 및 연산자 이름. 데이터 유형 및 기능 이름은 정확히 테이블 이름과 마찬가지로. 유자격을 작성 해야하는 경우 표현식에 운영자 이름에는 특별 조항이 있습니다. 당신은 작성해야합니다
연산자 (토토 꽁 머니.운영자)
이것은 구문 모호성을 피하기 위해 필요합니다. 예 이다:
3 연산자 선택 (PG_CATALOG.+) 4;
실제로는 일반적으로 검색 경로에 의존합니다. 운영자, 아무것도 쓰지 않아도됩니다. 저것.
기본적으로 사용자는 토토 꽁 머니의 객체에 액세스 할 수 없습니다. 소유하지 마십시오. 이를 허용하기 위해 토토 꽁 머니의 소유자는 | 그랜트usage개요. 사용자가 토토 꽁 머니, 추가 권한을 부여해야 할 수도 있습니다 대상에 적합합니다.
사용자는 누군가에게 객체를 만들 수 있습니다. else의 토토 꽁 머니. 그것을 허용하기 위해,Create토토 꽁 머니의 권한이 있어야합니다 부여된. 기본적으로 모든 사람이Createandusage토토 꽁 머니의 권한public. 이것 주어진 데이터베이스에 연결할 수있는 모든 사용자가 허용합니다. 그 객체를 만들려면public토토 꽁 머니. 당신이 그것을 허용하고 싶지 않다면, 당신은 그것을 취소 할 수 있습니다 특권:
공개에서 토토 꽁 머니 대중에 대한 취소;
(첫 번째"public"입니다 토토 꽁 머니, 두 번째"public"평균"모든 사용자". 첫 번째 의미에서 두 번째 의미에서는 식별자이므로 핵심 단어이므로 다른 대문자; 의 지침을 상기섹션 4.1.1.)
외에공개및 사용자가 제작 한 토토 꽁 머니, 각 데이터베이스에는가 포함됩니다.PG_CATALOG시스템을 포함하는 토토 꽁 머니 테이블 및 모든 내장 데이터 유형, 기능 및 연산자.PG_CATALOG항상입니다 검색 경로의 효과적으로 일부. 이름이없는 경우 명시 적으로 경로에서 암시 적으로 검색됩니다전검색 Path의 토토 꽁 머니. 이렇게하면 내장 이름이 항상있을 수 있습니다 찾을 수 있습니다. 그러나 명시 적으로 배치 할 수 있습니다PG_CATALOG검색 경로 끝에서 사용자 정의 이름이 내장 이름을 재정의하는 것을 선호합니다.
inPostgreSQL버전 7.3 이전, 테이블 이름은PG_예약되었습니다. 이것은 더 이상 사실이 아닙니다 : 당신 원하는 경우, 비 시스템에서 그러한 테이블 이름을 만들 수 있습니다. 개요. 그러나 그러한 이름을 계속 피하는 것이 가장 좋습니다. 향후 버전이라면 충돌을 겪지 않도록하십시오. 테이블과 동일한 시스템 테이블을 정의합니다. ( 기본 검색 경로, 테이블에 대한 자격이없는 참조 이름은 대신 시스템 테이블로 해결됩니다.) 시스템 테이블은 이름을 갖는 협약을 계속 따릅니다. 부터 시작PG_사용자만큼 자격이없는 사용자 테이블 이름과 충돌하지 마십시오. 피하십시오PG_prefix.
토토 꽁 머니를 사용하여 여러 가지 방법으로 데이터를 구성 할 수 있습니다. 권장되는 몇 가지 사용 패턴이 있습니다. 기본 구성에 의해 쉽게 지원됩니다 :
토토 꽁 머니를 만들지 않으면 모든 사용자가 액세스 할 수 있습니다. 공개 토토 꽁 머니는 암시 적으로. 이것은 상황을 시뮬레이션합니다 토토 꽁 머니를 전혀 사용할 수없는 곳. 이 설정입니다 주로 단일 사용자 만 있거나 데이터베이스에서 협력하는 사용자는 거의 없습니다. 이 설정은 또한 허용합니다 비 토토 꽁 머니 인식 세계에서 부드러운 전환.
동일한 이름으로 각 사용자에 대한 토토 꽁 머니를 만들 수 있습니다. 그 사용자로서. 기본 검색 경로가 시작된다는 것을 상기하십시오 와 함께$ user사용자 이름. 따라서 각 사용자에게 별도의 토토 꽁 머니가있는 경우 그들은 기본적으로 자신의 토토 꽁 머니에 액세스합니다.
이 설정을 사용하면 취소 할 수도 있습니다. 공개 토토 꽁 머니에 대한 액세스 (또는 전적으로 삭제) 사용자는 자신의 토토 꽁 머니로 진정으로 제한됩니다.
공유 응용 프로그램을 설치하려면 (테이블을 사용할 테이블 모두, 제 3자가 제공 한 추가 기능, 등), 별도의 토토 꽁 머니에 넣으십시오. 부여하는 것을 잊지 마십시오 다른 사용자가 액세스 할 수있는 적절한 권한 그들을. 그런 다음 사용자는 이러한 추가 객체를 다음과 같이 참조 할 수 있습니다 토토 꽁 머니 이름으로 이름을 자격하거나 추가 토토 꽁 머니는 검색 경로로 향합니다 선택하다.
SQL 표준에서 동일하게 물체의 개념 다른 사용자가 소유하고있는 토토 꽁 머니는 존재하지 않습니다. 게다가, 일부 구현으로 인해 토토 꽁 머니를 만들 수 없습니다. 소유자와 다른 이름을 가지고 있습니다. 사실, 개념 토토 꽁 머니와 사용자의 데이터베이스 시스템에서 거의 동일합니다. 이는 기준. 따라서 많은 사용자가 자격을 갖춘 이름을 고려합니다 정말로 구성사용자 이름.TableName. 이것은 방법입니다PostgreSQL당신이 효과적으로 행동 할 것입니다 모든 사용자를위한 사용자 별 토토 꽁 머니를 만듭니다.
또한 a의 개념은 없습니다.publicSQL 표준의 토토 꽁 머니. 최대 표준을 준수하면 사용해서는 안됩니다 (아마도 제거)public토토 꽁 머니
물론 일부 SQL 데이터베이스 시스템이 구현되지 않을 수 있습니다 토토 꽁 머니 또는 허용하여 네임 스페이스 지원을 제공합니다 (아마도 제한된) 교차-대사 액세스. 일 해야하는 경우 이러한 시스템을 사용하면 최대 이식성이 달성됩니다 토토 꽁 머니를 전혀 사용하지 않음.