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