2009-03-16 4 views
0

ASP.NET 3.5 및 PostgreSQL 8.3을 기반으로하는 응용 프로그램이 있습니다. 내 데이터베이스에는 3 명의 사용자, 데이터 소유자 (xxx 소유자), 데이터 편집기 (xxx 편집기) 및 데이터 뷰어 (xxx 뷰어)가 있습니다. 각 사용자에게는 xxx-schema, xxx-editor-schema 및 xxx-viewer-schema라는 자체 스키마가 있습니다. 모든 데이터는 xxx-schema에 저장됩니다.PostgreSQL을 사용할 때 select 문에서 스키마를 어디에 정의해야합니까?

이렇게하려면 다음 스 니펫과 같이 xxx-editor 또는 xxx-viewer 사용자로 데이터베이스에 연결할 때 스키마를 지정해야합니다.

NpgsqlCommand pgCommand = new NpgsqlCommand(); 
pgCommand.CommandText = @"SELECT 
         bldg_id, 
         bldg_name, 
         bldg_no, 
         FROM " + this.schema + @".buildings 
         WHERE UPPER(bldg_id) LIKE UPPER(@id);"; 

pgCommand.Parameters.Add("@id", "%" + id + "%"); 
pgCommand.Connection = pgConnection; 

이 경로를 따르려면 Web.config에서 스키마를 지정해야합니다. 그러나 어떤 스키마를 사용해야 하는지를 지정하는 더 좋은 방법이 있어야합니다. 가능한 경우 문자열 연결을 완전히 제거 할 수 있기를 바랍니다.

SQL 문에서 사용할 스키마를 정의하는 가장 좋은 방법은 무엇입니까?


편집

다음은 PostgreSQL User Manual에서 다음과 같은 유망 보인다.

SearchPath - 검색 경로를 지정된 스키마와 공용 스키마로 변경합니다.

제한된 테스트에서 제 상황에서는 문제가 없습니다. 그러나 이것은 PostgreSQL 전용 솔루션입니다. 아마도 데이터베이스 불가지론 적 솔루션이 더 많을 수 있습니까? 대부분의 데이터베이스가 이러한 기능을 제공합니까?


EDIT 2

나는 데이터베이스 수준에서 스키마 조회 순서를 변경 저를 인도하는 아래의 대답을 표시했습니다. 다음 변경 사항으로 인해 SQL 문에 코드를 추가 할 필요가 없습니다.

ALTER USER xxx-viewer SET search_path TO '$user', xxx, public, sde 

답변

3

사용 세션별로 스키마 검색 경로를 설정할 수 있습니다

SET search_path TO myschema 

를 다시 대중 스키마에 가을하려는 경우, 당신은 사용할 수 있습니다

SET search_path TO myschema, public 
+0

감사합니다. 훌륭한 작품입니다! 또한, 나는 "ALTER USER xxx-viewer SET 'search_path'$ user ', xxx, public, sde"를 통해 각 사용자의 search_path를 영구적으로 수정했습니다. 이렇게하면 SQL 문에 추가 코드가 필요하지 않습니다. –

0

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

SET SCHEMA 'myschema';

이 진술은 SET search_path TO myschema, public이지만 그 이상입니다.

관련 문제