0

Person 테이블과 여러 개의 응용 프로그램에 액세스하는 SQL 데이터베이스가 있다고 가정 해보십시오. 웬일인지 Person 테이블을 이전 버전과 호환되지 않는 방식으로 수정하려고합니다.이전 버전과의 호환성을 위해 PostgreSQL 스키마의 이름 공간을 지정 하시겠습니까?

호환성을 유지하기위한 가능한 해결책 중 하나는 테이블의 이름을 User으로 바꾸고 레거시 테이블과 동일한 인터페이스를 제공하는 Person보기를 만드는 것입니다. (에 을 추가하고및 필요에 따라 트리거를 삭제할 때 을 추가하십시오.

접근 방식은 몇 가지 변경 사항을 적용한 후에 의미가 정확한 이름을 사용할 수 없게되는 문제가 있습니다.

DB 버전에 따라 스키마 "인터페이스"를 "네임 스페이스"로 지정하는 가장 좋은 방법은 무엇입니까?

또는 이전 버전과의 호환성을 유지하는 더 좋은 방법이 있습니까?

답변

1

DB 버전에 따라 스키마 "인터페이스"를 "네임 스페이스"로 지정하는 가장 좋은 방법은 무엇입니까?

일반적인 요구 사항은 아니지만 유사한 작업이 필요한 경우 별도의 스키마 (네임 스페이스)에있는 테이블에 대한 하위 호환 가능 래퍼가 포함 된 새 스키마를 만드는 경향이 있습니다. 그런 다음 이전 버전 표가 필요한 사용자가 볼 수 있도록 다른 사용자가 새 버전을 볼 수 있도록 사용자별로 search_path을 설정합니다.

BC 주보기는 필요한 경우 기록을 지원하기 위해, RULE 또는 DO INSTEAD 트리거가 명시 적으로 정상 스키마에서 테이블의 현재 버전으로 참조 (새로운 PostgreSQL의 버전), 예를 들면 public.People있다.

ALTER USER ... SET search_path을 사용할 수있는 로그인 사용자 단위로 BC가 필요한 경우 또는 각 세션에서 SET search_path 명령을 실행하기 위해 BC가 필요한 응용 프로그램을 설정할 수있는 경우 (덜).

+0

답변 해 주셔서 감사합니다. 내 친구가 제안한 솔루션의 [예제] (http://pastebin.com/UmbTABVp)를 주셨습니다. – Samuel

관련 문제