Amazon RDS for PostgreSQL용 지원되는 외부 데이터 래퍼 작업 - Amazon Relational Database Service

Amazon RDS for PostgreSQL용 지원되는 외부 데이터 래퍼 작업

외부 데이터 래퍼(FDW)는 외부 데이터에 대한 액세스를 제공하는 특정 유형의 확장입니다. 예를 들어 oracle_fdw 확장을 사용하면 RDS for PostgreSQL DB 클러스터가 Oracle 데이터베이스와 함께 작동할 수 있습니다. 또 다른 예로, PostgreSQL 네이티브 postgres_fdw 확장을 사용하면 RDS for PostgreSQL DB 인스턴스 외부에서 PostgreSQL DB 인스턴스에 저장된 데이터에 액세스할 수 있습니다.

아래에서는 여러 지원되는 PostgreSQL 외부 데이터 래퍼에 관한 정보를 확인할 수 있습니다.

log_fdw 확장으로 SQL을 사용하여 DB 로그에 액세스

RDS for PostgreSQL DB 인스턴스는 SQL 인터페이스를 사용하여 데이터베이스 엔진 로그에 액세스할 수 있는 log_fdw 확장을 지원합니다. log_fdw 확장은 데이터베이스 로그용 외부 테이블을 간편하게 생성할 수 있게 해주는 2가지 함수를 제공합니다.

  • list_postgres_log_files – 데이터베이스 로그 디렉터리의 파일과 파일 크기(단위: 바이트)를 나열합니다.

  • create_foreign_table_for_log_file(table_name text, server_name text, log_file_name text) – 현재 데이터베이스에서 지정된 파일에 대해 외부 테이블을 빌드합니다.

log_fdw가 생성하는 모든 함수는 rds_superuser가 소유합니다. rds_superuser 역할의 구성원은 다른 데이터베이스 사용자에게 이러한 함수에 대한 액세스 권한을 부여할 수 있습니다.

기본적으로 로그 파일은 log_destination 파라미터에 명시된 대로 Amazon RDS에 의해 stderr(표준 오류) 형식으로 생성됩니다. 이 파라미터에는 두 가지 옵션만 있습니다. stderrcsvlog(쉼표로 구분된 값, CSV)입니다. 파라미터에 csvlog 옵션을 추가하는 경우 Amazon RDSstderrcsvlog 로그를 모두 생성합니다. 이는 DB 클러스터의 스토리지 용량에 영향을 줄 수 있으므로 로그 처리에 영향을 주는 다른 파라미터를 알고 있어야 합니다. 자세한 내용은 로그 대상 설정(stderr, csvlog) 섹션을 참조하세요.

csvlog 로그를 생성할 때의 한 가지 이점은 log_fdw 확장을 사용하여 여러 열로 깔끔하게 분할된 데이터로 외부 테이블을 작성할 수 있다는 점입니다. 그러려면 인스턴스를 사용자 지정 DB 파라미터 그룹과 연결해야 log_destination에 대한 설정을 변경할 수 있습니다. 이에 관한 정보는 RDS for PostgreSQL DB 인스턴스에 파라미터로 작업 단원을 참조하세요.

다음 예제에서는 log_destination 파라미터에 cvslog가 포함된 것으로 간주합니다.

log_fdw 확장을 사용하려면
  1. log_fdw 확장을 설치합니다.

    postgres=> CREATE EXTENSION log_fdw; CREATE EXTENSION
  2. 로그 서버를 외부 데이터 래퍼로 생성합니다.

    postgres=> CREATE SERVER log_server FOREIGN DATA WRAPPER log_fdw; CREATE SERVER
  3. 로그 파일 목록에서 모든 파일을 선택합니다.

    postgres=> SELECT * FROM list_postgres_log_files() ORDER BY 1;

    샘플 응답은 다음과 같습니다.

    file_name | file_size_bytes ------------------------------+----------------- postgresql.log.2023-08-09-22.csv | 1111 postgresql.log.2023-08-09-23.csv | 1172 postgresql.log.2023-08-10-00.csv | 1744 postgresql.log.2023-08-10-01.csv | 1102 (4 rows)
  4. 선택한 파일에 대해 단일 'log_entry' 열이 있는 테이블을 생성합니다.

    postgres=> SELECT create_foreign_table_for_log_file('my_postgres_error_log', 'log_server', 'postgresql.log.2023-08-09-22.csv');

    응답은 테이블이 현재 존재한다는 것 외에는 세부 정보를 제공하지 않습니다.

    ----------------------------------- (1 row)
  5. 로그 파일의 샘플을 선택합니다. 다음 코드는 로그 시간 및 오류 메시지 설명을 검색합니다.

    postgres=> SELECT log_time, message FROM my_postgres_error_log ORDER BY 1;

    샘플 응답은 다음과 같습니다.

    log_time | message ----------------------------------+--------------------------------------------------------------------------- Tue Aug 09 15:45:18.172 2023 PDT | ending log output to stderr Tue Aug 09 15:45:18.175 2023 PDT | database system was interrupted; last known up at 2023-08-09 22:43:34 UTC Tue Aug 09 15:45:18.223 2023 PDT | checkpoint record is at 0/90002E0 Tue Aug 09 15:45:18.223 2023 PDT | redo record is at 0/90002A8; shutdown FALSE Tue Aug 09 15:45:18.223 2023 PDT | next transaction ID: 0/1879; next OID: 24578 Tue Aug 09 15:45:18.223 2023 PDT | next MultiXactId: 1; next MultiXactOffset: 0 Tue Aug 09 15:45:18.223 2023 PDT | oldest unfrozen transaction ID: 1822, in database 1 (7 rows)

postgres_fdw 확장을 사용하여 외부 데이터 액세스

postgres_fdw 확장으로 원격 데이터베이스에 있는 테이블의 데이터에 액세스할 수 있습니다. PostgreSQL DB 인스턴스에서 원격 연결을 설정하는 경우 읽기 전용 복제본에도 액세스할 수 있습니다.

postgres_fdw로 원격 데이터베이스 서버에 액세스하려면
  1. postgres_fdw 확장을 설치합니다.

    CREATE EXTENSION postgres_fdw;
  2. CREATE SERVER로 외부 데이터 서버를 생성합니다.

    CREATE SERVER foreign_server FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'xxx.xx.xxx.xx', port '5432', dbname 'foreign_db');
  3. 원격 서버에 사용할 역할 식별을 위하여 사용자 매핑을 생성합니다.

    CREATE USER MAPPING FOR local_user SERVER foreign_server OPTIONS (user 'foreign_user', password 'password');
  4. 원격 서버에서 테이블을 매핑할 테이블을 생성합니다.

    CREATE FOREIGN TABLE foreign_table ( id integer NOT NULL, data text) SERVER foreign_server OPTIONS (schema_name 'some_schema', table_name 'some_table');

mysql_fdw 확장을 사용하여 MySQL 데이터베이스 작업

RDS for PostgreSQL DB 인스턴스에서 MySQL 호환 데이터베이스에 액세스하려면 mysql_fdw 확장을 설치하고 사용하면 됩니다. 이 외부 데이터 래퍼를 사용하면 RDS for MySQL, Aurora MySQL, MariaDB 및 기타 MySQL 호환 데이터베이스로 작업할 수 있습니다. RDS for PostgreSQL DB 인스턴스에서 MySQL 데이터베이스로의 연결은 클라이언트 및 서버 구성에 따라 최선의 방식으로 암호화됩니다. 그러나 원하는 경우 암호화를 적용할 수 있습니다. 자세한 내용은 확장에서 전송 중 암호화 사용 섹션을 참조하세요.

mysql_fdw 확장은 Amazon RDS for PostgreSQL 버전 14.2, 13.6 이상에서 지원됩니다. RDS for PostgreSQL DB에서 MySQL 호환 데이터베이스 인스턴스의 테이블에 대한 선택, 삽입, 업데이트 및 삭제를 지원합니다.

mysql_fdw 확장을 사용하도록 RDS for PostgreSQL DB 설정

RDS for PostgreSQL DB 인스턴스에서 mysql_fdw 확장을 설정하려면 DB 인스턴스에서 확장을 로드한 다음 MySQL DB 인스턴스에 대한 연결 지점을 생성해야 합니다. 이 작업을 수행하려면 MySQL DB 인스턴스에 대한 다음과 같은 세부 정보가 필요합니다.

  • 호스트 이름 또는 엔드포인트. RDS for MySQL DB 인스턴스의 경우 콘솔을 사용하여 엔드포인트를 찾을 수 있습니다. 연결 및 보안(Connectivity & security) 탭을 선택하고 '엔드포인트 및 포트(Endpoint and port)' 섹션을 살펴봅니다.

  • 포트 번호. MySQL의 기본 포트 번호는 3306입니다.

  • 데이터베이스 이름 DB 식별자입니다.

또한 MySQL 포트 3306의 액세스 제어 목록(ACL) 또는 보안 그룹에 대한 액세스를 제공해야 합니다. RDS for PostgreSQL DB 인스턴스와 RDS for MySQL DB 인스턴스에 포트 3306에 대한 액세스 권한이 있어야 합니다. 액세스가 올바르게 구성되지 않은 경우 MySQL 호환 테이블에 연결하려고 하면 다음과 비슷한 오류 메시지가 표시됩니다.

ERROR: failed to connect to MySQL: Can't connect to MySQL server on 'hostname.aws-region.rds.amazonaws.com:3306' (110)

다음 절차에서는 rds_superuser 계정으로 외부 서버를 생성합니다. 그런 다음 특정 사용자에게 외부 서버에 대한 액세스 권한을 부여합니다. 그러면 이러한 사용자가 MySQL DB 인스턴스로 작업하기 위해 적절한 MySQL 사용자 계정에 대한 자체 매핑을 생성합니다.

mysql_fdw로 MySQL 데이터베이스 서버에 액세스하려면
  1. rds_superuser 역할이 있는 계정을 사용하여 PostgreSQL DB 인스턴스에 연결합니다. RDS for PostgreSQL DB 인스턴스를 생성할 때 기본값을 수락한 경우 사용자 이름은 postgres이고 다음과 같이 psql 명령줄 도구를 사용하여 연결할 수 있습니다.

    psql --host=your-DB-instance.aws-region.rds.amazonaws.com --port=5432 --username=postgres –-password
  2. 다음과 같이 mysql_fdw 확장을 설치합니다.

    postgres=> CREATE EXTENSION mysql_fdw; CREATE EXTENSION

RDS for PostgreSQL DB 인스턴스에 확장을 설치한 후 MySQL 데이터베이스에 대한 연결을 제공하는 외부 서버를 설정합니다.

외부 서버를 생성하려면

RDS for PostgreSQL DB 인스턴스에서 작업을 수행합니다. 이러한 단계에서는 postgres와 같은 rds_superuser 권한이 있는 사용자로 연결되어 있다고 가정합니다.

  1. RDS for PostgreSQL DB 인스턴스에서 외부 서버를 생성합니다.

    postgres=> CREATE SERVER mysql-db FOREIGN DATA WRAPPER mysql_fdw OPTIONS (host 'db-name.111122223333.aws-region.rds.amazonaws.com', port '3306'); CREATE SERVER
  2. 적절한 사용자에게 외부 서버에 대한 액세스 권한을 부여합니다. 관리자가 아닌 사용자, 즉 rds_superuser 역할이 없는 사용자여야 합니다.

    postgres=> GRANT USAGE ON FOREIGN SERVER mysql-db to user1; GRANT

PostgreSQL 사용자는 외부 서버를 통해 MySQL 데이터베이스에 대한 자체 연결을 생성하고 관리합니다.

예: RDS for PostgreSQL에서 RDS for MySQL 데이터베이스로 작업

RDS for PostgreSQL DB 인스턴스에 간단한 테이블이 있다고 가정합니다. RDS for PostgreSQL 사용자는 해당 테이블에 대해 (SELECT), INSERT, UPDATE, DELETE 항목을 쿼리하려고 합니다. 앞의 절차에서 설명한 대로 RDS for PostgreSQL DB 인스턴스에 mysql_fdw 확장이 생성되었다고 가정합니다. rds_superuser 권한이 있는 사용자로 RDS for PostgreSQL DB 인스턴스에 연결한 후 다음 단계를 진행할 수 있습니다.

  1. RDS for PostgreSQL DB 인스턴스에서 외부 서버를 생성합니다.

    test=> CREATE SERVER mysqldb FOREIGN DATA WRAPPER mysql_fdw OPTIONS (host 'your-DB.aws-region.rds.amazonaws.com', port '3306'); CREATE SERVER
  2. rds_superuser 권한이 없는 사용자(예: user1)에게 사용 권한을 부여합니다.

    test=> GRANT USAGE ON FOREIGN SERVER mysqldb TO user1; GRANT
  3. user1으로 연결한 다음 MySQL 사용자에 대한 매핑을 생성합니다.

    test=> CREATE USER MAPPING FOR user1 SERVER mysqldb OPTIONS (username 'myuser', password 'mypassword'); CREATE USER MAPPING
  4. MySQL 테이블에 연결된 외부 테이블을 만듭니다.

    test=> CREATE FOREIGN TABLE mytab (a int, b text) SERVER mysqldb OPTIONS (dbname 'test', table_name ''); CREATE FOREIGN TABLE
  5. 외부 테이블에 대한 간단한 쿼리를 실행합니다.

    test=> SELECT * FROM mytab; a | b ---+------- 1 | apple (1 row)
  6. MySQL 테이블에서 데이터를 추가, 변경 및 제거할 수 있습니다. 예를 들면 다음과 같습니다.

    test=> INSERT INTO mytab values (2, 'mango'); INSERT 0 1

    SELECT 쿼리를 다시 실행하여 결과를 확인합니다.

    test=> SELECT * FROM mytab ORDER BY 1; a | b ---+------- 1 | apple 2 | mango (2 rows)

확장에서 전송 중 암호화 사용

RDS for PostgreSQL에서 MySQL에 대한 연결은 기본적으로 전송 중 암호화(TLS/SSL)를 사용합니다. 그러나 클라이언트와 서버 구성이 다를 경우 연결이 암호화되지 않은 상태로 폴백됩니다. RDS for MySQL 사용자 계정에서 REQUIRE SSL 옵션을 지정하여 나가는 모든 연결에 대해 암호화를 적용할 수 있습니다. 이와 동일한 접근 방식이 MariaDB 및 Aurora MySQL 사용자 계정에서도 작동합니다.

REQUIRE SSL로 구성된 MySQL 사용자 계정의 경우 보안 연결을 설정할 수 없으면 연결 시도가 실패합니다.

기존 MySQL 데이터베이스 사용자 계정에 암호화를 적용하려면 ALTER USER 명령을 사용할 수 있습니다. 구문은 다음 표에 나온 대로 MySQL 버전에 따라 다릅니다. 자세한 내용은 MySQL 참조 매뉴얼ALTER USER를 참조하세요.

MySQL 5.7, MySQL 8.0 MySQL 5.6

ALTER USER 'user'@'%' REQUIRE SSL;

GRANT USAGE ON *.* to 'user'@'%' REQUIRE SSL;

mysql_fdw 확장에 대한 자세한 내용은 mysql_fdw 설명서를 참조하세요.

oracle_fdw 확장을 사용하여 Oracle 데이터베이스 작업

RDS for PostgreSQL DB 인스턴스에서 Oracle 데이터베이스에 액세스하려면 oracle_fdw 확장을 설치하고 사용할 수 있습니다. 이 확장은 Oracle 데이터베이스의 외부 데이터 래퍼입니다. 이 확장 프로그램에 대해 자세히 알아보려면 oracle_fdw 문서를 참조하세요.

oracle_fdw 확장은 RDS for PostgreSQL 버전 12.7 및 13.3 이상에서 지원됩니다.

oracle_fdw 확장 켜기

oracle_fdw 확장을 사용하려면 다음 절차를 수행하십시오.

oracle_fdw 확장을 켜려면
  • rds_superuser 권한이 있는 계정을 사용하여 다음 명령을 실행합니다.

    CREATE EXTENSION oracle_fdw;

예제: Amazon RDS for Oracle Database에 연결된 외부 서버 사용

다음 예에서는 Amazon RDS for Oracle Database에 연결된 외부 서버를 사용하는 방법을 보여줍니다.

RDS for Oracle Database에 연결된 외부 서버를 만들려면
  1. RDS for Oracle DB 인스턴스에서는 다음 사항에 유의하세요.

    • Endpoint

    • 포트

    • 데이터베이스 이름

  2. 외부 서버를 만듭니다.

    test=> CREATE SERVER oradb FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver '//endpoint:port/DB_name'); CREATE SERVER
  3. rds_superuser 권한이 없는 사용자(예: user1)에게 사용 권한을 부여합니다.

    test=> GRANT USAGE ON FOREIGN SERVER oradb TO user1; GRANT
  4. user1로 연결하고 Oracle 사용자에 대한 매핑을 생성합니다.

    test=> CREATE USER MAPPING FOR user1 SERVER oradb OPTIONS (user 'oracleuser', password 'mypassword'); CREATE USER MAPPING
  5. Oracle 테이블에 연결된 외부 테이블을 만듭니다.

    test=> CREATE FOREIGN TABLE mytab (a int) SERVER oradb OPTIONS (table 'MYTABLE'); CREATE FOREIGN TABLE
  6. 외부 테이블을 쿼리합니다.

    test=> SELECT * FROM mytab; a --- 1 (1 row)

쿼리에서 다음 오류를 보고하면 보안 그룹 및 액세스 제어 목록(ACL)을 확인하여 두 인스턴스가 모두 통신할 수 있는지 확인합니다.

ERROR: connection for foreign table "mytab" cannot be established DETAIL: ORA-12170: TNS:Connect timeout occurred

전송 중 암호화 작업

PostgreSQL에서 Oracle 간의 전송 중인 암호화는 클라이언트와 서버 구성 파라미터의 조합을 기반으로 합니다. Oracle 21c를 사용하는 예제는 Oracle 문서의 About the Values for Negotiating Encryption and Integrity를 참조하세요. Amazon RDS에서 Oracle_fdw에 사용되는 클라이언트는 ACCEPTED로 구성됩니다. 즉, Oracle 데이터베이스 서버 구성에 따라 암호화가 달라진다는 의미입니다.

데이터베이스가 RDS for Oracle에 있는 경우 암호화를 구성하려면 Oracle 기본 네트워크 암호화를 참조하세요.

pg_user_mappings 보기 및 권한 이해

PostgreSQL 카탈로그 pg_user_mapping에서 RDS for PostgreSQL 사용자의 매핑을 외부 데이터(원격) 서버의 사용자에게 저장합니다. 카탈로그에 대한 액세스는 제한되어 있지만 pg_user_mappings 보기를 사용하여 매핑을 확인합니다. 다음에서는 예제 Oracle 데이터베이스를 통해 권한이 적용되는 방법을 보여 주는 예제를 확인할 수 있지만, 이 정보는 다른 외부 데이터 래퍼에도 일반적으로 적용됩니다.

다음 결과에서는 세 가지 예제 사용자에 매핑된 역할 및 권한을 찾을 수 있습니다. 사용자 rdssu1rdssu2rds_superuser 역할이며 user1은 아닙니다. 다음 예제에서는 psql 메타 명령 \du를 사용하여 기존 역할을 나열합니다.

test=> \du List of roles Role name | Attributes | Member of -----------------+------------------------------------------------------------+------------------------------------------------------------- rdssu1 | | {rds_superuser} rdssu2 | | {rds_superuser} user1 | | {}

rds_superuser 권한이 있는 사용자를 포함한 모든 사용자는 pg_user_mappings 테이블에서 자신의 사용자 매핑(umoptions)을 볼 수 있습니다. 다음 예제와 같이 rdssu1이 모든 사용자 매핑을 얻으려고 하면 rdssu1rds_superuser 권한에도 불구하고 오류가 발생합니다.

test=> SELECT * FROM pg_user_mapping; ERROR: permission denied for table pg_user_mapping

다음은 일부 예입니다.

test=> SET SESSION AUTHORIZATION rdssu1; SET test=> SELECT * FROM pg_user_mappings; umid | srvid | srvname | umuser | usename | umoptions -------+-------+---------+--------+------------+---------------------------------- 16414 | 16411 | oradb | 16412 | user1 | 16423 | 16411 | oradb | 16421 | rdssu1 | {user=oracleuser,password=mypwd} 16424 | 16411 | oradb | 16422 | rdssu2 | (3 rows) test=> SET SESSION AUTHORIZATION rdssu2; SET test=> SELECT * FROM pg_user_mappings; umid | srvid | srvname | umuser | usename | umoptions -------+-------+---------+--------+------------+---------------------------------- 16414 | 16411 | oradb | 16412 | user1 | 16423 | 16411 | oradb | 16421 | rdssu1 | 16424 | 16411 | oradb | 16422 | rdssu2 | {user=oracleuser,password=mypwd} (3 rows) test=> SET SESSION AUTHORIZATION user1; SET test=> SELECT * FROM pg_user_mappings; umid | srvid | srvname | umuser | usename | umoptions -------+-------+---------+--------+------------+-------------------------------- 16414 | 16411 | oradb | 16412 | user1 | {user=oracleuser,password=mypwd} 16423 | 16411 | oradb | 16421 | rdssu1 | 16424 | 16411 | oradb | 16422 | rdssu2 | (3 rows)

information_schema._pg_user_mappingspg_catalog.pg_user_mappings의 구현 차이점 때문에 수동으로 생성된 rds_superuserpg_catalog.pg_user_mappings에서 암호를 보려면 추가 권한이 필요합니다.

information_schema._pg_user_mappings에서 암호를 보려면 rds_superuser에 대한 추가 권한은 필요하지 않습니다.

rds_superuser 역할이 없는 사용자는 다음 조건에서만 pg_user_mappings에서 암호를 볼 수 있습니다.

  • 현재 사용자는 매핑되는 사용자이며 서버를 소유하거나 서버에 대한 USAGE 권한을 보유하고 있습니다.

  • 현재 사용자는 서버 소유자이고 매핑은 PUBLIC에 대한 것입니다.

tds_fdw 확장을 사용하여 SQL Server 데이터베이스 작업

PostgreSQL tds_fdw 확장을 사용하여 Sybase 및 Microsoft SQL Server 데이터베이스와 같은 테이블 형식 데이터 스트림(TDS) 프로토콜을 지원하는 데이터베이스에 액세스할 수 있습니다. 이 외부 데이터 래퍼를 사용하면 RDS for PostgreSQL DB 인스턴스 에서 Amazon RDS for Microsoft SQL Server를 포함하여 TDS 프로토콜을 사용하는 데이터베이스에 연결할 수 있습니다. 자세한 내용은 GitHub에서 tds-fdw/tds_fdw 설명서를 참조하세요.

tds_fdw 확장은 Amazon RDS for PostgreSQL 버전 14.2 및 13.6 이상 릴리스에서 지원됩니다.

tds_fdw 확장을 사용하도록 Aurora PostgreSQL DB 설정

다음 절차에서는 RDS for PostgreSQL DB 인스턴스와 함께 tds_fdw를 설정하고 사용하는 예를 확인할 수 있습니다. tds_fdw를 사용하여 SQL Server 데이터베이스에 연결하기 전에 인스턴스에 대한 다음 세부 정보를 확인해야 합니다.

  • 호스트 이름 또는 엔드포인트. RDS for SQL Server DB 인스턴스의 경우 콘솔을 사용하여 엔드포인트를 찾을 수 있습니다. 연결 및 보안(Connectivity & security) 탭을 선택하고 '엔드포인트 및 포트(Endpoint and port)' 섹션을 살펴봅니다.

  • 포트 번호. Microsoft SQL Server의 기본 포트 번호는 포트 1433입니다.

  • 데이터베이스 이름 DB 식별자입니다.

또한 SQL Server 포트 1433의 액세스 제어 목록(ACL) 또는 보안 그룹에 대한 액세스를 제공해야 합니다. RDS for PostgreSQL DB 인스턴스와 RDS for MySQL DB 인스턴스가 모두 포트 1433에 액세스할 수 있어야 합니다. 액세스가 올바르게 구성되지 않은 경우 Microsoft SQL Server를 쿼리하려고 할 때 다음 오류 메시지가 나타납니다.

ERROR: DB-Library error: DB #: 20009, DB Msg: Unable to connect: Adaptive Server is unavailable or does not exist (mssql2019.aws-region.rds.amazonaws.com), OS #: 0, OS Msg: Success, Level: 9
tds_fdw를 사용하여 SQL Server 데이터베이스에 연결하려면
  1. rds_superuser 역할이 있는 계정을 사용하여 PostgreSQL DB 인스턴스에 연결합니다.

    psql --host=your-DB-instance.aws-region.rds.amazonaws.com --port=5432 --username=test –-password
  2. tds_fdw 확장을 설치합니다.

    test=> CREATE EXTENSION tds_fdw; CREATE EXTENSION

RDS for PostgreSQL DB 인스턴스에 확장을 설치한 후 외부 서버를 설정합니다.

외부 서버를 생성하려면

rds_superuser 권한이 있는 계정을 사용하여 RDS for PostgreSQL DB 인스턴스에서 다음과 같은 작업을 수행합니다.

  1. RDS for PostgreSQL DB 인스턴스에서 외부 서버를 생성합니다.

    test=> CREATE SERVER sqlserverdb FOREIGN DATA WRAPPER tds_fdw OPTIONS (servername 'mssql2019.aws-region.rds.amazonaws.com', port '1433', database 'tds_fdw_testing'); CREATE SERVER

    SQLServer 측에서 ASCII가 아닌 데이터에 액세스하려면 RDS for PostgreSQL DB 인스턴스S에서 character_set 옵션을 사용하여 서버 링크를 생성합니다.

    test=> CREATE SERVER sqlserverdb FOREIGN DATA WRAPPER tds_fdw OPTIONS (servername 'mssql2019.aws-region.rds.amazonaws.com', port '1433', database 'tds_fdw_testing', character_set 'UTF-8'); CREATE SERVER
  2. rds_superuser 역할 권한이 없는 사용자(예: user1)에게 권한을 부여합니다.

    test=> GRANT USAGE ON FOREIGN SERVER sqlserverdb TO user1;
  3. user1으로 연결한 다음 SQL Server 사용자에 대한 매핑을 생성합니다.

    test=> CREATE USER MAPPING FOR user1 SERVER sqlserverdb OPTIONS (username 'sqlserveruser', password 'password'); CREATE USER MAPPING
  4. SQL Server 테이블에 연결된 외부 테이블을 만듭니다.

    test=> CREATE FOREIGN TABLE mytab (a int) SERVER sqlserverdb OPTIONS (table 'MYTABLE'); CREATE FOREIGN TABLE
  5. 외부 테이블을 쿼리합니다.

    test=> SELECT * FROM mytab; a --- 1 (1 row)

연결에 전송 중 암호화 사용

RDS for PostgreSQL에서 SQL Server로의 연결은 SQL Server 데이터베이스 구성에 따라 전송 중 암호화(TLS/SSL)를 사용합니다. SQL Server에 암호화가 구성되지 않은 경우 SQL Server 데이터베이스에 대한 요청을 수행하는 RDS for PostgreSQL 클라이언트가 암호화되지 않은 상태로 폴백됩니다.

rds.force_ssl 파라미터를 설정하여 RDS for SQL Server DB 인스턴스에 대한 연결에 암호화를 적용할 수 있습니다. 자세한 방법은 DB 인스턴스 연결이 SSL을 사용하도록 지정을 참조하세요. RDS for SQL Server에 대한 SSL/TLS 구성과 관련된 자세한 내용은 Microsoft SQL Server DB 인스턴스와 함께 SSL 사용을 참조하세요.