2013-10-02 5 views
7

저는 여러 스키마에서 hstore을 사용해야하는 프로젝트 작업을하고 있습니다. 확장명이 hstore 인 'public'스키마는 내 범위가 'public'을 조회하지 않기 때문에 모든 곳에서 사용할 수 없습니다. 일부 시험에서는 'hstore'라는 스키마에서 확장을 생성하고 사용 된 모든 사용 가능한 범위 (검색 경로)에서 스키마를 사용했습니다. 이를 바탕으로Postgres 데이터베이스의 여러 스키마에 hstore를 설치하는 가장 좋은 방법은 무엇입니까?

, 나는 몇 가지 질문을했습니다 :

  • 단지 확장에 대한 스키마를 만들려면 확인인가? 또는 모든 단일 스키마 (예 : customer_1, customer_2 등)에 확장을 만드는 것이 더 좋습니까?

  • 별도의 스키마에서 확장 생성은 데이터가 저장되는 위치에 영향을 줍니까? 백업/복원을 쉽게하기 위해 여러 스키마를 사용하고 있으며, 단일 스키마에서 pg가 hstore 데이터를 숨겨진 테이블 (예 : pg_large_objects blob)에 모두 저장하는 것을 원하지 않습니다.

답변

6

데이터베이스 당 확장을 여러 번 설치할 수 없습니다. the manual on CREATE EXTENSION 인용 :

는 확장 자체가 어떤 스키마 내에서 정보로 간주되지 않습니다주의 사항 : 확장 데이터베이스 전체에서 고유해야합니다 비정규 이름이 있습니다. 그러나 확장에 속하는 객체는 스키마 내에있을 수 있습니다.

당신이 당신의 search_pathpublic을 포함 전용 스키마 (예 : extensions)에 "공개"확장을 설치하지 않으려면. 각 확장에 대해 별도의 스키마가 아닌 모든 스키마에 단일 스키마를 사용합니다.

CREATE EXTENSION hstore SCHEMA extensions; 

을 그리고 스키마가 그것의 사용을 할 수 있습니다 사용자의 search_path에 포함되어 있는지 확인 : There are quite a few of them. CREATE EXTENSION 당신의 선택의 기존의 스키마를 설치하는 옵션을 제공합니다.

데이터 스토리지 확장이 상주하는 스키마에 전혀 영향을받지 않습니다.

+0

은'확장에 확장 hstore를 설치하려면이 시도 '스키마를 search_path에 추가해야합니까? – Qcom

+1

@ Qcom : 맞음. search_path에있는 스키마의 순서도 적절합니다. * 또는 * 연산자를 포함하여 참조하려는 모든 객체를 스키마 한정해야합니다! 세부 정보 : http://stackoverflow.com/questions/22975599/how-to-use-operator-from-the-extension-pg-trgm/22975642#22975642 –

+0

전용 채널에 확장 기능을 설치하는 데 명확한 이점이 있습니까? 스키마를 공개하지 않고 사용 하시겠습니까? – Qcom

0

모든 스키마

create extension hstore schema pg_catalog; 
+0

'pg_catalog'에 비 핵심 사항을 저장하는 것은 좋은 생각이 아닙니다. –