구현이 제한된 Babelfish 기능 사용 - Amazon Aurora

구현이 제한된 Babelfish 기능 사용

Babelfish의 새로운 버전이 나올 때마다 T-SQL 기능 및 동작에 잘 맞는 여러 기능이 추가로 지원되고 있습니다. 하지만 현재 구현에는 지원되지 않는 기능 및 차이점이 몇 가지 있습니다. Babelfish와 T-SQL의 기능적 차이에 대한 정보와 일부 해결 방법 또는 사용법 관련 참고 사항을 아래에서 확인할 수 있습니다.

Babelfish 버전 1.2.0의 경우 다음 기능이 현재 제한적으로 구현되어 있습니다.

  • SQL Server 카탈로그(시스템 뷰) - 카탈로그 sys.sysconfigures,sys.syscurconfigssys.configurations에서 단일 읽기 전용 구성만 지원합니다. sp_configure는 현재 지원되지 않습니다. Babelfish에서 구현되는 다른 SQL Server 뷰에 대한 자세한 내용은 Babelfish 시스템 카탈로그에서 정보 얻기 섹션을 참조하세요.

  • GRANT 권한 - GRANT...TO PUBLIC은 지원되지만 GRANT..TO PUBLIC WITH GRANT OPTION은 현재 지원되지 않습니다.

  • SQL Server 소유권 체인 및 권한 메커니즘 제한 - Babelfish에서 SQL Server 소유권 체인은 뷰에 대해 작동하지만 저장 프로시저에 대해서는 작동하지 않습니다. 즉, 프로시저에는 호출 프로시저와 동일한 소유자가 소유한 다른 객체에 대한 명시적 액세스 권한이 부여되어야 합니다. SQL Server에서 호출자에게 프로시저에 대한 EXECUTE 권한을 부여하면 동일한 소유자가 소유한 다른 객체를 호출할 수 있습니다. Babelfish에서는 호출자에게 프로시저에서 액세스하는 객체에 대한 권한을 부여해야 합니다.

  • 정규화되지 않은(스키마 이름 없음) 객체 참조 확인 - SQL 객체(프로시저, 뷰, 함수 또는 트리거)가 스키마 이름으로 한정하지 않고 객체를 참조하는 경우 SQL Server는 참조가 발생하는 SQL 객체의 스키마 이름을 사용하여 객체의 스키마 이름을 확인합니다. 현재 Babelfish는 프로시저를 실행하는 데이터베이스 사용자의 기본 스키마를 사용하여 이를 다르게 해결합니다.

  • 기본 스키마 변경, 세션 및 연결 - 사용자가 ALTER USER...WITH DEFAULT SCHEMA를 사용하여 기본 스키마를 변경하면 변경 사항이 해당 세션에서 즉시 적용됩니다. 그러나 동일한 사용자에게 속한 현재 연결된 다른 세션의 경우 타이밍이 다음과 같이 다릅니다.

    • SQL Server의 경우: 변경 사항이 이 사용자의 다른 모든 연결에 즉시 적용됩니다.

    • Babelfish의 경우: 변경 사항이 이 사용자의 새 연결에만 적용됩니다.

  • ROWVERSION 및 TIMESTAMP 데이터 유형 구현 및 이스케이프 해치 설정 - 이제 Babelfish에서 ROWVERSION 및 TIMESTAMP 데이터 유형이 지원됩니다. Babelfish에서 ROWVERSION 또는 TIMESTAMP를 사용하려면 이스케이프 해치 babelfishpg_tsql.escape_hatch_rowversion의 설정을 기본값(strict)에서 ignore로 변경해야 합니다. ROWVERSION 및 TIMESTAMP 데이터 유형의 Babelfish 구현은 대부분 SQL Server와 의미상 동일하지만 다음과 같은 예외가 있습니다.

    • 기본 제공 @@DBTS 함수는 SQL Server와 유사하게 동작하지만, 약간의 차이가 있습니다. Babelfish는 마지막으로 사용한 SELECT @@DBTS 값을 반환하는 대신 기본 PostgreSQL 데이터베이스 엔진과 다중 버전 동시성 제어(MVCC) 구현으로 인해 새로운 타임스탬프를 생성합니다.

    • SQL Server에서는 삽입되거나 업데이트된 모든 행이 고유한 ROWVERSION/TIMESTAMP 값을 갖습니다. Babelfish에서는 동일한 명령문에 의해 업데이트된 모든 삽입된 행에 동일한 ROWVERSION/TIMESTAMP 값이 할당됩니다.

      예를 들어 UPDATE 문 또는 INSERT-SELECT 문이 여러 행에 영향을 미치는 경우 SQL Server에서는 영향을 받는 행이 모두 ROWVERSION/TIMESTAMP 열에 서로 다른 값을 갖습니다. Babelfish(PostgreSQL)에서는 그러한 행이 동일한 값을 갖습니다.

    • SQL Server에서는 SELECT-INTO를 사용하여 새 테이블을 만들 때 생성되는 ROWVERSION/TIMESTAMP 열에 명시적 값(예: NULL)을 캐스팅할 수 있습니다. Babelfish에서는 동일한 작업을 수행하면 Babelfish에 의해 새 테이블의 각 행에 실제 ROWVERSION/TIMESTAMP 값이 할당됩니다.

    ROWVERSION/TIMESTAMP 데이터 유형의 이러한 사소한 차이점은 Babelfish에서 실행되는 애플리케이션에 부정적인 영향을 미치지 않습니다.

스키마 생성, 소유권 및 권한 - 비DBO 사용자가 소유하는 스키마에서 객체를 생성 및 액세스할 수 있는 권한(CREATE SCHEMA schema name AUTHORIZATION user name 사용)은 다음 표와 같이 SQL Server와 Babelfish 비DBO 사용자 간에 다릅니다.

스키마를 소유하는 데이터베이스 사용자(비DBO)가 수행할 수 있는 작업: SQL Server Babelfish

DBO의 추가 권한 부여 없이 스키마에 객체 생성

아니요

추가 권한 부여 없이 DBO가 스키마에서 생성한 객체에 액세스할 수 있나요?

아니요