Amazon RDS for PostgreSQL로 PostgreSQL 확장 사용
다양한 확장 프로그램 및 모듈을 설치하여 PostgreSQL의 기능을 확장할 수 있습니다. 예를 들어 공간 데이터로 작업하려면 PostGIS 확장을 설치하고 사용할 수 있습니다. 자세한 내용은 PostGIS 확장을 사용하여 공간 데이터 관리 섹션을 참조하세요. 또 다른 예로, 매우 큰 테이블의 데이터 입력을 개선하려는 경우 pg_partman
확장을 사용하여 데이터 분할을 고려할 수 있습니다. 자세한 내용은 pg_partman 확장자를 사용하여 PostgreSQL 파티션 관리하기 단원을 참조하세요.
참고
RDS for PostgreSQL 14.5부터, RDS for PostgreSQL은 PostgreSQL용 신뢰할 수 있는 언어 확장을 지원합니다. 이 기능은 RDS for PostgreSQL DB 인스턴스에 추가할 수 있는 pg_tle
확장으로 구현됩니다. 이 확장을 사용하면 개발자는 설정 및 구성 요구 사항을 간소화하는 안전한 환경에서 자체 PostgreSQL 확장을 만들 수 있습니다. 자세한 내용은 PostgreSQL용 신뢰할 수 있는 언어 확장 작업 섹션을 참조하세요.
경우에 따라 확장을 설치하는 대신 RDS for PostgreSQL DB 인스턴스의 사용자 지정 DB 파라미터 그룹의 shared_preload_libraries
목록에 특정 모듈을 추가할 수 있습니다. 일반적으로 기본 DB 클러스터 파라미터 그룹은 pg_stat_statements
만 로드하지만 목록에 추가할 수 있는 다른 모듈도 몇 개 있습니다. 예를 들어, PostgreSQL pg_cron 확장을 사용하여 유지 관리 예약에 자세히 설명된 대로 pg_cron
모듈을 추가하여 스케줄링 기능을 추가할 수 있습니다. 또 다른 예로, auto_explain
모듈을 로드하여 쿼리 실행 계획을 로깅할 수 있습니다. 자세히 알아보려면 AWS 지식 센터에서 쿼리 실행 계획 로깅에 관한 문서
RDS for PostgreSQL 버전에 따라 확장 프로그램을 설치하려면 다음과 같이 rds_superuser
권한이 필요합니다.
RDS for PostgreSQL 버전 12 및 이전 버전의 경우 확장 프로그램을 설치하려면
rds_superuser
권한이 필요합니다.RDS for PostgreSQL 버전 13 및 이상 버전의 경우 지정된 데이터베이스 인스턴스에 대한 생성 권한이 있는 사용자(역할)는 신뢰할 수 있는 확장 프로그램을 설치하고 사용할 수 있습니다. 신뢰할 수 있는 확장 프로그램 목록은 PostgreSQL 신뢰할 수 있는 확장 섹션을 참조하세요.
RDS for PostgreSQL DB 인스턴스에 설치할 수 있는 확장 프로그램을 rds.allowed_extensions
파라미터에 나열하여 정확하게 지정할 수도 있습니다. 기본적으로 이 파라미터는 설정되지 않으므로 사용자에게 권한이 있는 경우 지원되는 확장 프로그램을 추가할 수 있습니다. 이 파라미터에 확장 프로그램 목록을 추가하면 RDS for PostgreSQL DB 인스턴스가 사용할 수 있는 확장을 명시적으로 식별할 수 있습니다. 나열되지 않은 확장 프로그램은 설치할 수 없습니다. 이 기능은 다음 버전에서 사용할 수 있습니다.
-
RDS for PostgreSQL 14.1 이상의 모든 버전
-
RDS for PostgreSQL 13.3 이상의 마이너 버전
-
RDS for PostgreSQL 12.7 이상의 마이너 버전
자세한 내용은 PostgreSQL 확장의 설치 제한 섹션을 참조하세요.
rds_superuser
역할에 대한 자세한 내용은 PostgreSQL 역할 및 권한 이해 섹션을 참조하세요.
주제
orafce 확장에서 함수 사용
orafce 확장은 Oracle 데이터베이스에서 함수와 패키지의 하위 집합을 에뮬레이션하는 함수 및 연산자를 제공합니다. orafce 확장을 사용하면 Oracle 애플리케이션을 PostgreSQL로 쉽게 포팅할 수 있습니다. 이 확장은 RDS for PostgreSQL 버전 9.6.6 이상에서 지원됩니다. orafce에 대한 자세한 내용은 GitHub에서 orafce
참고
RDS for PostgreSQL은 orafce 확장의 일부분인 utl_file
패키지를 지원하지 않습니다. 이는 utl_file
스키마 함수가 기본 호스트에 대한 수퍼유저 권한을 필요로 하는 운영 체제 텍스트 파일의 읽기 및 쓰기 작업을 제공하기 때문입니다. 관리형 서비스에서 RDS for PostgreSQL은 호스트 액세스를 제공하지 않습니다.
orafce 확장을 사용하려면
DB 인스턴스를 생성할 때 사용한 기본 사용자 이름으로 DB 인스턴스에 연결합니다.
동일한 DB 인스턴스의 다른 데이터베이스에 대해 orafce를 활성화하려면
/c dbname
psql 명령을 사용합니다. 이 명령을 사용하면 연결을 시작한 후 기본 데이터베이스에서 변경합니다.CREATE EXTENSION
문을 사용하여 orafce 확장을 활성화합니다.CREATE EXTENSION orafce;
ALTER SCHEMA
문을 사용하여 oracle 스키마 소유권을 rds_superuser 역할로 이전합니다.ALTER SCHEMA oracle OWNER TO rds_superuser;
oracle 스키마의 소유자 목록을 보려면
\dn
psql 명령을 사용합니다.
pgAudit를 사용하여 데이터베이스 활동 로깅
금융 기관, 정부 기관 및 많은 업계에서는 규제 요구 사항을 충족하기 위해 감사 로그를 보관해야 합니다. RDS for PostgreSQL DB 인스턴스와 함께 PostgreSQL Audit 확장(pgAudit)을 사용하면 감사자가 일반적으로 필요로 하거나 규제 요구 사항을 충족하는 데 필요한 세부 레코드를 캡처할 수 있습니다. 예를 들어 특정 데이터베이스 및 테이블의 변경 내용을 추적하고 변경한 사용자 및 기타 여러 세부 정보를 기록하도록 pgAudit 확장을 설정할 수 있습니다.
pgAudit 확장은 네이티브 PostgreSQL 로깅 인프라의 기능을 기반으로 로그 메시지를 더 자세히 확장한 것입니다. 즉, 다른 로그 메시지를 보는 것과 동일한 접근 방식을 사용하여 감사 로그를 볼 수 있습니다. PostgreSQL 로깅에 대한 자세한 내용은 RDS for PostgreSQL 데이터베이스 로그 파일 섹션을 참조하세요.
pgAudit 확장은 일반 텍스트 암호와 같은 민감한 데이터를 로그에서 삭제합니다. RDS for PostgreSQL DB 인스턴스가 RDS for PostgreSQL DB 인스턴스에 쿼리 로깅을 활성화합니다.에 설명된 대로 데이터 조작 언어(DML) 문을 로깅하도록 구성된 경우 PostgreSQL Audit 확장을 사용하여 일반 텍스트 암호 문제를 방지할 수 있습니다.
매우 구체적으로 데이터베이스 인스턴스에 대한 감사를 구성할 수 있습니다. 모든 데이터베이스와 모든 사용자를 감사할 수 있습니다. 또는 특정 데이터베이스, 사용자 및 기타 객체만 감사하도록 선택할 수 있습니다. 특정 사용자 및 데이터베이스를 감사에서 명시적으로 제외할 수도 있습니다. 자세한 내용은 감사 로깅에서 사용자 또는 데이터베이스 제외 섹션을 참조하세요.
캡처할 수 있는 세부 정보의 양을 고려하여 pgAudit를 사용하는 경우 스토리지 사용량을 모니터링하는 것이 좋습니다.
pgAudit 확장은 사용 가능한 모든 RDS for PostgreSQL 버전 RDS for PostgreSQL 버전에서 지원되는 pgAudit 버전 목록을 보려면 Aurora PostgreSQL 릴리스 정보의 Extension versions for Amazon RDS for PostgreSQL(Amazon RDS for PostgreSQL 확장 버전)을 참조하세요.
pgAudit 확장 설정
RDS for PostgreSQL DB 인스턴스에 pgAudit 확장을 설정하려면 먼저 RDS for PostgreSQL DB 인스턴스용 사용자 지정 DB 파라미터 그룹의 공유 라이브러리에 pgAudit을 추가해야 합니다. 사용자 지정 DB 클러스터 파라미터 그룹을 만드는 방법에 관한 자세한 내용은 파라미터 그룹 작업 섹션을 참조하세요. 다음으로 pgAudit 확장을 설치합니다. 마지막으로, 감사하려는 데이터베이스 및 객체를 지정합니다. 이 섹션에 절차가 설명되어 있습니다. AWS Management Console 또는 AWS CLI를 사용할 수 있습니다.
이 모든 작업을 수행하려면 rds_superuser
역할의 권한이 있어야 합니다.
다음 단계에서는 사용자의 RDS for PostgreSQL DB 인스턴스가 사용자 지정 DB에 연결되어 있다고 가정합니다.
pgAudit 확장 설정 방법
AWS Management Console에 로그인한 후 https://console.aws.amazon.com/rds/
에서 Amazon RDS 콘솔을 엽니다. -
탐색 창에서 RDS for PostgreSQL DB 인스턴스를 선택합니다.
-
의 구성 탭을 엽니다. RDS for PostgreSQL DB 인스턴스 인스턴스 세부 정보 중에서 파라미터 그룹 링크를 찾습니다.
-
링크를 선택하여 와 연결된 사용자 지정 파라미터를 엽니다. RDS for PostgreSQL DB 인스턴스
-
파라미터 검색 필드에
shared_pre
를 입력하여shared_preload_libraries
파라미터를 찾습니다. -
파라미터 편집을 선택하여 속성 값에 액세스합니다.
-
값 필드의 목록에
pgaudit
를 추가합니다. 쉼표를 사용하여 값 목록에서 항목을 구분합니다. RDS for PostgreSQL DB 인스턴스를 재부팅하여
shared_preload_libraries
파라미터 변경 사항이 적용되도록 합니다.인스턴스를 사용할 수 있게 되면 pgAudit가 초기화되었는지 확인합니다.
psql
을 사용하여 RDS for PostgreSQL DB 인스턴스에 연결하고 다음 명령을 실행합니다.SHOW shared_preload_libraries;
shared_preload_libraries -------------------------- rdsutils,pgaudit (1 row)
pgAudit가 초기화되었으므로 이제 확장을 생성할 수 있습니다. 확장은 라이브러리를 초기화한 후에 생성해야 합니다.
pgaudit
확장이 데이터 정의 언어(DDL) 문 감사를 위한 이벤트 트리거를 설치하기 때문입니다.CREATE EXTENSION pgaudit;
psql
세션을 닫습니다.labdb=>
\q
AWS Management Console에 로그인한 후 https://console.aws.amazon.com/rds/
에서 Amazon RDS 콘솔을 엽니다. 목록에서
pgaudit.log
파라미터를 찾아 사용 사례에 적합한 값으로 설정합니다. 예를 들어, 다음 이미지처럼pgaudit.log
파라미터를write
로 설정하면 로그에 대한 삽입, 업데이트, 삭제 및 기타 유형의 변경 사항이 캡처됩니다.pgaudit.log
파라미터에 다음 값 중 하나를 선택할 수도 있습니다.없음 - 기본값입니다. 데이터베이스 변경 사항이 로깅되지 않습니다.
모두 - 모든 항목(읽기, 쓰기, 함수, 역할, ddl, 기타)을 로깅합니다.
ddl -
ROLE
클래스에 포함되지 않은 모든 데이터 정의 언어(DDL) 문을 로깅합니다.함수 - 함수 호출 및
DO
블록을 로깅합니다.기타 – 기타 명령(예:
DISCARD
,FETCH
,CHECKPOINT
,VACUUM
,SET
)을 로깅합니다.읽기 – 원본이 관계(예: 테이블) 또는 쿼리인 경우
SELECT
및COPY
를 로깅합니다.역할 - 역할 및 권한과 관련된 문을 로깅합니다(예:
GRANT
,REVOKE
,CREATE ROLE
,ALTER ROLE
,DROP ROLE
).쓰기 - 대상이 관계(테이블)인 경우
INSERT
,UPDATE
,DELETE
,TRUNCATE
,COPY
를 로깅합니다.
Save changes(변경 사항 저장)를 선택합니다.
https://console.aws.amazon.com/rds/
에서 Amazon RDS 콘솔을 엽니다. 데이터베이스 목록에서 RDS for PostgreSQL DB 인스턴스를 선택한 다음, 작업 메뉴에서 재부팅을 선택합니다.
pgAudit 설정 방법
AWS CLI를 사용하여 pgAudit를 설정하려면 다음 절차와 같이 modify-db-parameter-group 작업을 호출하여 사용자 지정 파라미터 그룹의 감사 로그 파라미터를 수정합니다.
다음 AWS CLI 명령을 사용하여
shared_preload_libraries
파라미터에pgaudit
를 추가합니다.aws rds modify-db-parameter-group \ --db-parameter-group-name
custom-param-group-name
\ --parameters "ParameterName=shared_preload_libraries,ParameterValue=pgaudit,ApplyMethod=pending-reboot" \ --regionaws-region
-
다음 AWS CLI 명령으로 RDS for PostgreSQL DB 인스턴스를 재부팅하여 pgaudit 라이브러리가 초기화되도록 합니다.
aws rds reboot-db-instance \ --db-instance-identifier
your-instance
\ --regionaws-region
인스턴스를 사용할 수 있게 되면
pgaudit
가 초기화되었는지 확인할 수 있습니다.psql
을 사용하여 RDS for PostgreSQL DB 인스턴스에 연결하고 다음 명령을 실행합니다.SHOW shared_preload_libraries;
shared_preload_libraries -------------------------- rdsutils,pgaudit (1 row)
pgAudit가 초기화되었으므로 이제 확장을 생성할 수 있습니다.
CREATE EXTENSION pgaudit;
AWS CLI를 사용할 수 있도록
psql
세션을 닫습니다.labdb=>
\q
다음 AWS CLI 명령을 사용하여 세션 감사 로깅을 통해 로깅할 문의 클래스를 지정합니다. 이 예에서는
pgaudit.log
파라미터를write
로 설정하여 로그에 대한 삽입, 업데이트 및 삭제를 캡처합니다.aws rds modify-db-parameter-group \ --db-parameter-group-name
custom-param-group-name
\ --parameters "ParameterName=pgaudit.log,ParameterValue=write
,ApplyMethod=pending-reboot" \ --regionaws-region
pgaudit.log
파라미터에 다음 값 중 하나를 선택할 수도 있습니다.없음 - 기본값입니다. 데이터베이스 변경 사항이 로깅되지 않습니다.
모두 - 모든 항목(읽기, 쓰기, 함수, 역할, ddl, 기타)을 로깅합니다.
ddl -
ROLE
클래스에 포함되지 않은 모든 데이터 정의 언어(DDL) 문을 로깅합니다.함수 - 함수 호출 및
DO
블록을 로깅합니다.기타 – 기타 명령(예:
DISCARD
,FETCH
,CHECKPOINT
,VACUUM
,SET
)을 로깅합니다.읽기 – 원본이 관계(예: 테이블) 또는 쿼리인 경우
SELECT
및COPY
를 로깅합니다.역할 - 역할 및 권한과 관련된 문을 로깅합니다(예:
GRANT
,REVOKE
,CREATE ROLE
,ALTER ROLE
,DROP ROLE
).쓰기 - 대상이 관계(테이블)인 경우
INSERT
,UPDATE
,DELETE
,TRUNCATE
,COPY
를 로깅합니다.
다음 AWS CLI 명령으로 RDS for PostgreSQL DB 인스턴스를 재부팅합니다.
aws rds reboot-db-instance \ --db-instance-identifier
your-instance
\ --regionaws-region
데이터베이스 객체 감사
RDS for PostgreSQL DB 인스턴스에 pgAudit를 설정하고 요구 사항에 맞게 구성하면 PostgreSQL 로그에 더 자세한 정보가 캡처됩니다. 예를 들어 기본 PostgreSQL 로깅 구성은 데이터베이스 테이블에서 변경 사항이 적용된 날짜 및 시간을 식별하지만 pgAudit 확장을 사용하면 확장 파라미터의 구성에 따라 스키마, 변경한 사용자 및 기타 세부 정보가 로그 항목에 포함될 수 있습니다. 감사를 설정하여 다음 방법으로 변경 사항을 추적할 수 있습니다.
세션마다 사용자별로 추적. 세션 수준에서 정규화된 명령 텍스트를 캡처할 수 있습니다.
객체마다 사용자별, 데이터베이스별로 추적
객체 감사 기능은 시스템에서 rds_pgaudit
역할을 만든 다음, 사용자 지정 파라미터 그룹의 pgaudit.role
파라미터에 이 역할을 추가하면 활성화됩니다. 기본적으로 pgaudit.role
파라미터는 설정되어 있지 않으며 유일하게 허용되는 값은 rds_pgaudit
입니다. 다음 단계에서는 pgaudit
가 초기화되었고 pgAudit 확장 설정의 절차에 따라 pgaudit
확장을 만든 것으로 가정합니다.

이 예에서 볼 수 있듯이 LOG: AUDIT: SESSION 행은 테이블 및 해당 스키마를 비롯한 세부 정보를 제공합니다.
객체 감사를 설정하는 방법
psql
을 사용하여 RDS for PostgreSQL DB 인스턴스에 연결합니다.psql --host=
your-instance-name
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres
postgres --password --dbname=labdb
-
다음 명령을 사용하여
rds_pgaudit
라는 데이터베이스 역할을 생성합니다.labdb=>
CREATE ROLE rds_pgaudit;
CREATE ROLE
labdb=>
psql
세션을 닫습니다.labdb=>
\q
이어질 몇 단계에서는 AWS CLI를 사용하여 사용자 지정 파라미터 그룹에서 감사 로그 파라미터를 수정합니다.
-
다음 AWS CLI 명령을 사용하여
rds_pgaudit
에pgaudit.role
파라미터를 추가합니다. 기본적으로 이 파라미터는 설정되어 있지 않으며 유일하게 허용되는 값은rds_pgaudit
입니다.aws rds modify-db-parameter-group \ --db-parameter-group-name
custom-param-group-name
\ --parameters "ParameterName=pgaudit.role,ParameterValue=rds_pgaudit,ApplyMethod=pending-reboot" \ --regionaws-region
-
다음 AWS CLI 명령으로 RDS for PostgreSQL DB 인스턴스를 재부팅하여 파라미터 변경 사항이 적용되도록 합니다.
aws rds reboot-db-instance \ --db-instance-identifier
your-instance
\ --regionaws-region
다음 명령을 실행하여
pgaudit.role
이rds_pgaudit
로 설정되었는지 확인합니다.SHOW pgaudit.role;
pgaudit.role ------------------ rds_pgaudit
pgAudit 로깅을 테스트하기 위해 감사하려는 몇 가지 예제 명령을 실행할 수 있습니다. 예를 들어 다음과 같은 명령을 실행할 수 있습니다.
CREATE TABLE t1 (id int); GRANT SELECT ON t1 TO rds_pgaudit; SELECT * FROM t1;
id ---- (0 rows)
데이터베이스 로그에는 다음과 유사한 항목이 포함됩니다.
...
2017-06-12 19:09:49 UTC:...:rds_test@postgres:[11701]:LOG: AUDIT:
OBJECT,1,1,READ,SELECT,TABLE,public.t1,select * from t1;
...
로그 확인에 대한 자세한 내용은 Amazon RDS 로그 파일 모니터링 단원을 참조하십시오.
pgAudit 확장 프로그램에 대한 자세한 내용은 GitHub에서 pgAudit
감사 로깅에서 사용자 또는 데이터베이스 제외
RDS for PostgreSQL 데이터베이스 로그 파일에서 설명한 대로 PostgreSQL 로그는 스토리지 공간을 사용합니다. pgAudit 확장을 사용하면 추적하는 변경 사항에 따라 로그에 수집된 데이터 양이 다양한 수준으로 늘어납니다. 의 모든 사용자 또는 데이터베이스를 감사할 필요는 없을 수도 있습니다. RDS for PostgreSQL DB 인스턴스
스토리지에 미치는 영향을 최소화하고 불필요하게 감사 레코드를 캡처하지 않도록 사용자 및 데이터베이스를 감사에서 제외할 수 있습니다. 지정된 세션 내에서 로깅을 변경할 수도 있습니다. 다음 예에서는 그 방법을 보여줍니다.
참고
세션 수준의 파라미터 설정은 RDS for PostgreSQL DB 인스턴스에 대한 사용자 지정 DB 파라미터 그룹의 설정보다 우선합니다. 데이터베이스 사용자가 감사 로깅 구성 설정을 우회하지 못하게 하려면 사용자의 권한을 변경해야 합니다.
RDS for PostgreSQL DB 인스턴스가 모든 사용자 및 데이터베이스에 대해 동일한 수준의 활동을 감사하도록 구성되어 있다고 가정하겠습니다. 그런데 사용자 myuser
를 감사하지 않기로 결정한다면 다음 SQL 명령으로 myuser
에 대한 감사를 해제할 수 있습니다.
ALTER USER myuser SET pgaudit.log TO 'NONE';
그런 다음 다음 쿼리를 사용하여 pgaudit.log
의 user_specific_settings
열에서 파라미터가 NONE
으로 설정되었는지 확인할 수 있습니다.
SELECT usename AS user_name, useconfig AS user_specific_settings FROM pg_user WHERE usename = 'myuser';
출력은 다음과 같습니다.
user_name | user_specific_settings
-----------+------------------------
myuser | {pgaudit.log=NONE}
(1 row)
다음 명령을 사용하여 데이터베이스 세션 중에 특정 사용자에 대한 로깅을 해제할 수 있습니다.
ALTER USER myuser IN DATABASE mydatabase SET pgaudit.log TO 'none';
다음 쿼리를 사용하여 pgaudit.log의 설정 열에서 특정 사용자 및 데이터베이스 조합을 확인할 수 있습니다.
SELECT usename AS "user_name", datname AS "database_name", pg_catalog.array_to_string(setconfig, E'\n') AS "settings" FROM pg_catalog.pg_db_role_setting s LEFT JOIN pg_catalog.pg_database d ON d.oid = setdatabase LEFT JOIN pg_catalog.pg_user r ON r.usesysid = setrole WHERE usename = 'myuser' AND datname = 'mydatabase' ORDER BY 1, 2;
출력은 다음과 비슷합니다.
user_name | database_name | settings
-----------+---------------+------------------
myuser | mydatabase | pgaudit.log=none
(1 row)
myuser
에 대한 감사를 해제한 후 mydatabase
에 대한 변경 내용을 추적하지 않기로 결정한다면 다음 명령을 사용하여 특정 데이터베이스에 대한 감사를 해제합니다.
ALTER DATABASE mydatabase SET pgaudit.log to 'NONE';
그런 다음, 다음 쿼리를 사용하여 database_specific_settings 열에서 pgaudit.log가 NONE으로 설정되어 있는지 확인합니다.
SELECT a.datname AS database_name, b.setconfig AS database_specific_settings FROM pg_database a FULL JOIN pg_db_role_setting b ON a.oid = b.setdatabase WHERE a.datname = 'mydatabase';
출력은 다음과 같습니다.
database_name | database_specific_settings
---------------+----------------------------
mydatabase | {pgaudit.log=NONE}
(1 row)
myuser의 설정을 기본 설정으로 되돌리려면 다음 명령을 사용합니다.
ALTER USER myuser RESET pgaudit.log;
데이터베이스의 설정을 기본 설정으로 되돌리려면 다음 명령을 사용합니다.
ALTER DATABASE mydatabase RESET pgaudit.log;
사용자와 데이터베이스를 기본 설정으로 초기화하려면 다음 명령을 사용합니다.
ALTER USER myuser IN DATABASE mydatabase RESET pgaudit.log;
pgaudit.log
를 pgaudit.log
파라미터에 허용되는 다른 값 중 하나로 설정하여 특정 이벤트를 로그에 캡처할 수도 있습니다. 자세한 내용은 pgaudit.log 파라미터에 허용되는 설정 목록 섹션을 참조하세요.
ALTER USER myuser SET pgaudit.log TO 'read'; ALTER DATABASE mydatabase SET pgaudit.log TO 'function'; ALTER USER myuser IN DATABASE mydatabase SET pgaudit.log TO 'read,function'
pgAudit 확장 프로그램에 대한 참조
이 섹션에 나열된 파라미터를 하나 이상 변경하여 감사 로그의 세부 정보 수준을 지정할 수 있습니다.
pgAudit 동작 제어
다음 표에 나열된 파라미터 중 하나 이상을 변경하여 감사 로깅을 제어할 수 있습니다.
파라미터 | 설명 |
---|---|
| 세션 감사 로깅으로 로깅될 문의 클래스를 지정합니다. 허용되는 값에는 ddl, 함수, 기타, 읽기, 역할, 쓰기, 없음, 모두 등이 포함됩니다. 자세한 내용은 pgaudit.log 파라미터에 허용되는 설정 목록 섹션을 참조하세요. |
|
활성화(1로 설정)하면 문의 모든 관계가 pg_catalog에 있는 경우 감사 추적에 문을 추가합니다. |
|
로그 항목에 사용할 로그 수준을 지정합니다. 허용되는 값은 ebug5, debug4, debug3, debug2, debug1, 정보, 알림, 경고, 로그입니다. |
|
활성화(1로 설정)하면 문과 함께 전달된 파라미터가 감사 로그에 캡처됩니다. |
|
활성화(1로 설정)하면 세션의 감사 로그에서 SELECT 또는 DML 문에서 참조되는 각 관계(TABLE, VIEW 등) 에 대해 별도의 로그 항목을 생성합니다. |
|
로깅에 문/하위 문 조합에 대한 첫 번째 로그 항목이 있는 문 텍스트 및 파라미터를 포함할지 아니면 모든 항목이 있는 문 텍스트 및 파라미터를 포함할지를 지정합니다. |
|
객체 감사 로깅에 사용할 마스터 역할을 지정합니다. 유일하게 허용되는 항목은 |
pgaudit.log
파라미터에 허용되는 설정 목록
값 | 설명 |
---|---|
none | 이 값이 기본값입니다. 데이터베이스 변경 사항이 로깅되지 않습니다. |
모두 | 모든 항목(읽기, 쓰기, 함수, 역할, ddl, 기타)을 로깅합니다. |
ddl |
|
함수 | 함수 호출 및 |
기타 | 기타 명령을 로깅합니다(예: |
read | 원본이 관계(예: 테이블) 또는 쿼리인 경우 |
역할 | 역할 및 권한과 관련된 문을 로깅합니다(예: |
write | 대상이 관계(테이블)인 경우 |
세션 감사를 사용하여 여러 이벤트 유형을 기록하려면 쉼표로 구분된 목록을 사용합니다. 모든 이벤트 유형을 기록하려면 pgaudit.log
를 ALL
로 설정합니다. DB 인스턴스를 재부팅하여 변경 사항을 적용합니다.
객체 감사를 사용하면 특정 관계를 사용하도록 감사 로깅을 구체화할 수 있습니다. 예를 들어 하나 이상의 테이블에서 READ
작업에 대한 감사 로깅을 지정할 수 있습니다.
pglogical을 사용하여 인스턴스 간 데이터 동기화
현재 사용 가능한 모든 RDS for PostgreSQL 버전은 pglogical
확장을 지원합니다. pglogical 확장은 PostgreSQL 버전 10에서 도입된 기능적으로 유사한 논리적 복제 기능보다 먼저 출시되었습니다. 자세한 내용은 Amazon RDS for PostgreSQL에 대한 논리적 복제 수행 섹션을 참조하세요.
pglogical
확장은 둘 이상의 간의 논리적 복제를 지원합니다. RDS for PostgreSQL DB 인스턴스. 서로 다른 PostgreSQL 버전 간의 복제와 PostgreSQL DB 인스턴스용 RDS 및 Aurora PostgreSQL DB 클러스터에서 실행되는 데이터베이스 간의 복제도 지원합니다. pglogical
확장은 게시-구독 모델을 사용하여 게시자의 테이블 및 기타 객체(예: 시퀀스)의 변경 사항을 구독자에 복제합니다. 이 확장은 복제 슬롯을 사용하여, 다음과 같이 게시자 노드의 변경 사항이 구독자 노드로 동기화되게 합니다.
게시자 노드는 다른 노드에 복제할 데이터의 소스인 RDS for PostgreSQL DB 인스턴스입니다. 게시자 노드는 게시 세트에서 복제될 테이블을 정의합니다.
구독자 노드는 게시자로부터 WAL 업데이트를 받는 RDS for PostgreSQL DB 인스턴스입니다. 구독자는 구독을 생성하여 게시자에 연결하고 디코딩된 WAL 데이터를 얻습니다. 구독자가 구독을 생성하면 게시자 노드에서 복제 슬롯이 생성됩니다.
아래에서 pglogical
확장 설정 관련 정보를 확인할 수 있습니다.
주제
plogical 확장에 대한 요구 사항 및 제한
현재 사용 가능한 모든 RDS for PostgreSQL 릴리스는 pglogical
확장을 지원합니다.
게시자 노드와 구독자 노드 모두가 논리적 복제를 할 수 있도록 설정되어야 합니다.
구독자에서 게시자로 복제할 테이블은 이름과 스키마가 동일해야 합니다. 또한 이러한 테이블은 동일한 열을 포함해야 하며, 각 열은 동일한 데이터 유형을 사용해야 합니다. 게시자와 구독자 테이블 모두 프라이머리 키가 동일해야 합니다. PRIMARY KEY만 고유 제약 조건으로 사용하는 것이 좋습니다.
구독자 노드의 테이블에는 CHECK 제약 조건 및 NOT NULL 제약 조건에 대해 게시자 노드의 테이블에 있는 것보다 더 많은 허용 제약 조건이 존재할 수 있습니다.
pglogical
확장은 PostgreSQL(버전 10 이상)에 내장된 논리적 복제 기능에서는 지원하지 않는 양방향 복제 같은 기능을 제공합니다. 자세한 내용은 pglogical을 사용한 PostgreSQL 양방향 복제
pglogical 확장 설정
RDS for PostgreSQL DB 인스턴스 에 pglogical
확장을 설정하려면 PostgreSQL DB 인스턴스용 사용자 지정 DB 파라미터 그룹 의 공유 라이브러리에 pglogical
을 추가해야 합니다. 논리적 디코딩을 켜려면 rds.logical_replication
파라미터의 값을 1
로 설정해야 합니다. 마지막으로, 데이터베이스에서 확장을 만듭니다. 이러한 작업에는 AWS Management Console 또는 AWS CLI를 사용할 수 있습니다.
이러한 작업을 수행하려면 rds_superuser
역할의 권한이 있어야 합니다.
다음 단계에서는 사용자의 RDS for PostgreSQL DB 인스턴스가 사용자 지정 DB에 연결되어 있다고 가정합니다. 사용자 지정 DB 클러스터 파라미터 그룹을 만드는 방법에 관한 자세한 내용은 파라미터 그룹 작업 섹션을 참조하세요.
pglogical 확장 설정 방법
AWS Management Console에 로그인한 후 https://console.aws.amazon.com/rds/
에서 Amazon RDS 콘솔을 엽니다. -
탐색 창에서 RDS for PostgreSQL DB 인스턴스를 선택합니다.
-
의 구성 탭을 엽니다. RDS for PostgreSQL DB 인스턴스 인스턴스 세부 정보 중에서 파라미터 그룹 링크를 찾습니다.
-
링크를 선택하여 와 연결된 사용자 지정 파라미터를 엽니다. RDS for PostgreSQL DB 인스턴스
-
파라미터 검색 필드에
shared_pre
를 입력하여shared_preload_libraries
파라미터를 찾습니다. -
파라미터 편집을 선택하여 속성 값에 액세스합니다.
-
값 필드의 목록에
pglogical
를 추가합니다. 쉼표를 사용하여 값 목록에서 항목을 구분합니다. rds.logical_replication
파라미터를 찾아1
로 설정하여 논리적 복제를 켭니다.RDS for PostgreSQL DB 인스턴스를 재부팅하여 파라미터 변경 사항이 적용되게 합니다.
인스턴스를 사용할 수 있다면
psql
(또는 pgAdmin)을 사용하여 RDS for PostgreSQL DB 인스턴스에 연결할 수 있습니다.psql --host=
111122223333
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres
--password --dbname=labdb
plogical이 초기화되었는지 확인하려면 다음 명령을 실행합니다.
SHOW shared_preload_libraries;
shared_preload_libraries -------------------------- rdsutils,pglogical (1 row)
논리적 디코딩을 활성화하는 설정을 다음과 같이 확인합니다.
SHOW wal_level;
wal_level ----------- logical (1 row)
다음과 같이 확장을 생성합니다.
CREATE EXTENSION pglogical;
EXTENSION CREATED
Save changes(변경 사항 저장)를 선택합니다.
https://console.aws.amazon.com/rds/
에서 Amazon RDS 콘솔을 엽니다. 데이터베이스 목록에서 RDS for PostgreSQL DB 인스턴스를 선택한 다음, 작업 메뉴에서 재부팅을 선택합니다.
plogical 확장 설정 방법
AWS CLI를 사용하여 pglogical을 설정하려면 다음 절차와 같이 modify-db-parameter-group 작업을 호출하여 사용자 지정 파라미터 그룹의 특정 파라미터를 수정합니다.
다음 AWS CLI 명령을 사용하여
shared_preload_libraries
파라미터에pglogical
를 추가합니다.aws rds modify-db-parameter-group \ --db-parameter-group-name
custom-param-group-name
\ --parameters "ParameterName=shared_preload_libraries,ParameterValue=pglogical,ApplyMethod=pending-reboot" \ --regionaws-region
다음 AWS CLI 명령을 사용하여
rds.logical_replication
을1
으로 설정하여 용 논리적 디코딩 기능을 켭니다. RDS for PostgreSQL DB 인스턴스aws rds modify-db-parameter-group \ --db-parameter-group-name
custom-param-group-name
\ --parameters "ParameterName=rds.logical_replication,ParameterValue=1,ApplyMethod=pending-reboot" \ --regionaws-region
-
다음 AWS CLI 명령으로 RDS for PostgreSQL DB 인스턴스를 재부팅하여 pglogical 라이브러리가 초기화되도록 합니다.
aws rds reboot-db-instance \ --db-instance-identifier
your-instance
\ --regionaws-region
인스턴스를 사용할 수 있다면
psql
을 사용하여 RDS for PostgreSQL DB 인스턴스에 연결합니다.psql --host=
111122223333
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres
--password --dbname=labdb
다음과 같이 확장을 생성합니다.
CREATE EXTENSION pglogical;
EXTENSION CREATED
다음 AWS CLI 명령으로 RDS for PostgreSQL DB 인스턴스를 재부팅합니다.
aws rds reboot-db-instance \ --db-instance-identifier
your-instance
\ --regionaws-region
RDS for PostgreSQL DB 인스턴스용 논리적 복제 설정
다음 절차는 RDS for PostgreSQL DB 인스턴스 간에 논리적 복제를 시작하는 방법을 보여줍니다. 다음 단계에서는 원본(게시자)과 대상(구독자) 모두에 pglogical 확장 설정에서 설명하는 방법에 따라 pglogical
확장이 설정되어 있다고 가정합니다.
게시자 노드를 생성하고 복제할 테이블을 정의하는 방법
이 단계에서는 RDS for PostgreSQL DB 인스턴스에 데이터베이스 하나가 있고 이러한 데이터베이스에는 다른 노드에 복제할 하나 이상의 테이블이 있다고 가정합니다. 구독자의 테이블 구조를 게시자에서 다시 만들어야 하므로, 필요한 경우 먼저 테이블 구조를 가져와야 합니다. 이렇게 하려면 psq1
메타 명령을 사용한 다음 구독자 인스턴스에서 동일한 테이블을 생성해야 합니다. 다음 절차에서는 시연을 위해 게시자(원본)에서 예제 테이블을 만듭니다.
psql
을 사용하여 구독자용 소스로 사용할 테이블이 있는 인스턴스에 연결합니다.psql --host=
source-instance
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres
--password --dbname=labdb
복제하려는 기존 테이블이 없는 경우 다음과 같이 샘플 테이블을 생성할 수 있습니다.
다음 SQL 문을 사용하여 예제 테이블을 생성합니다.
CREATE TABLE docs_lab_table (a int PRIMARY KEY);
다음 SQL 문을 사용하여 테이블에 생성된 데이터를 입력합니다.
INSERT INTO docs_lab_table VALUES (generate_series(1,5000));
INSERT 0 5000
다음 SQL 문을 사용하여 테이블에 데이터가 있는지 확인합니다.
SELECT count(*) FROM docs_lab_table;
다음과 같이 이 RDS for PostgreSQL DB 인스턴스를 게시자 노드로 식별합니다.
SELECT pglogical.create_node( node_name := '
docs_lab_provider
', dsn := 'host=source-instance
.aws-region
.rds.amazonaws.com port=5432 dbname=labdb
');create_node ------------- 3410995529 (1 row)
복제할 테이블을 기본 복제 세트에 추가합니다. 복제 세트에 대한 자세한 내용은 pglogical 설명서의 복제 세트
를 참조하십시오. SELECT pglogical.replication_set_add_table('default', '
docs_lab_table
', 'true', NULL, NULL);replication_set_add_table --------------------------- t (1 row)
게시자 노드 설정이 완료되었습니다. 이제 게시자로부터 업데이트를 수신하도록 구독자 노드를 설정할 수 있습니다.
구독자 노드를 설정하고, 업데이트를 수신할 구독을 만드는 방법
이 단계에서는 RDS for PostgreSQL DB 인스턴스가 pglogical
확장을 이용해 설정되었다고 가정합니다. 자세한 내용은 pglogical 확장 설정 섹션을 참조하세요.
psql
을 사용하여 게시자로부터 업데이트를 수신할 인스턴스에 연결합니다.psql --host=
target-instance
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres
--password --dbname=labdb
-
구독자 RDS for PostgreSQL DB 인스턴스에서 게시자에 존재하는 것과 동일한 테이블을 만듭니다. 이 예제에서 테이블은
docs_lab_table
입니다. 다음과 같이 테이블을 만들 수 있습니다.CREATE TABLE docs_lab_table (a int PRIMARY KEY);
이 테이블이 비어 있는지 확인합니다.
SELECT count(*) FROM docs_lab_table;
count ------- 0 (1 row)
다음과 같이 이 RDS for PostgreSQL DB 인스턴스를 구독자 노드로 식별합니다.
SELECT pglogical.create_node( node_name := '
docs_lab_target
', dsn := 'host=target-instance
.aws-region
.rds.amazonaws.com port=5432 sslmode=require dbname=labdb
user=postgres
password=********
');create_node ------------- 2182738256 (1 row)
구독을 생성합니다.
SELECT pglogical.create_subscription( subscription_name := 'docs_lab_subscription', provider_dsn := 'host=
source-instance
.aws-region
.rds.amazonaws.com port=5432 sslmode=require dbname=labdb
user=postgres
password=*******
', replication_sets := ARRAY['default'], synchronize_data := true, forward_origins := '{}' );create_subscription --------------------- 1038357190 (1 row)
이 단계를 완료하면 게시자 테이블의 데이터가 구독자 테이블에서 생성됩니다. 다음 SQL 쿼리를 사용하면 이 문제가 발생했는지 확인할 수 있습니다.
SELECT count(*) FROM docs_lab_table;
count ------- 5000 (1 row)
이 시점 이후로는 게시자의 테이블에 적용한 변경 사항이 구독자의 테이블에 복제됩니다.
메이저 업그레이드 후 논리적 복제 재설정
논리적 복제용 게시자 노드로 설정된 RDS for PostgreSQL DB 인스턴스의 메이저 버전 업그레이드를 수행하려면, 먼저 활성화되지 않는 슬롯을 포함한 모든 복제 슬롯을 삭제해야 합니다. 게시자 노드에서 데이터베이스 트랜잭션을 일시적으로 전환하고, 복제 슬롯을 삭제하고, RDS for PostgreSQL DB인스턴스를 업그레이드한 다음 복제를 다시 설정하고 재시작하는 것이 좋습니다.
복제 슬롯은 게시자 노드에서만 호스팅됩니다. 논리적 복제 시나리오에서 RDS for PostgreSQL 구독자 노드는 삭제할 슬롯이 없지만, 게시자에 대한 구독이 있는 구독자 노드로 지정된 동안에는 메이저 버전으로 업그레이드할 수 없습니다. RDS for PostgreSQL를 구독자 노드로 업그레이드하기 전에 구독과 노드를 삭제합니다. 자세한 내용은 RDS for PostgreSQL용 논리적 복제 슬롯 관리 섹션을 참조하세요.
논리적 복제가 중단되었는지 확인
다음과 같이 게시자 노드 또는 구독자 노드를 쿼리하면 복제 프로세스 중단 여부를 확인할 수 있습니다.
게시자 노드를 확인하는 방법
psql
을 사용하여 게시자 노드에 연결한 다음pg_replication_slots
함수를 쿼리합니다. 활성 열의 값을 기록해 둡니다. 일반적으로 이 값은t
(true)를 반환하며, 복제가 활성 상태라는 뜻입니다. 쿼리가f
(false)을 반환한다면 구독자로의 복제가 중단되었다는 뜻입니다.SELECT slot_name,plugin,slot_type,active FROM pg_replication_slots;
slot_name | plugin | slot_type | active -------------------------------------------+------------------+-----------+-------- pgl_labdb_docs_labcb4fa94_docs_lab3de412c | pglogical_output | logical | f (1 row)
구독자 노드를 확인하는 방법
구독자 노드에서는 세 가지 방법으로 복제 상태를 확인할 수 있습니다.
구독자 노드의 PostgreSQL 로그를 확인하여 실패 메시지를 찾습니다. 로그는 다음과 같이 종료 코드 1을 포함하는 메시지를 이용해 실패를 식별합니다.
2022-07-06 16:17:03 UTC::@:[7361]:LOG: background worker "pglogical apply 16404:2880255011" (PID 14610) exited with exit code 1 2022-07-06 16:19:44 UTC::@:[7361]:LOG: background worker "pglogical apply 16404:2880255011" (PID 21783) exited with exit code 1
pg_replication_origin
함수를 쿼리합니다. 다음과 같이psql
을 사용하여 구독자 노드의 데이터베이스에 연결하고pg_replication_origin
함수를 쿼리합니다.SELECT * FROM pg_replication_origin;
roident | roname ---------+-------- (0 rows)
결과 집합이 비어 있다면 복제가 중단되었다는 뜻입니다. 일반적인 출력은 다음과 같습니다.
roident | roname ---------+---------------------------------------------------- 1 | pgl_labdb_docs_labcb4fa94_docs_lab3de412c (1 row)
다음 예제와 같이
pglogical.show_subscription_status
함수를 쿼리합니다.SELECT subscription_name,status,slot_name FROM pglogical.show_subscription_status();
subscription_name | status | slot_name ---====----------------+--------+------------------------------------- docs_lab_subscription | down | pgl_labdb_docs_labcb4fa94_docs_lab3de412c (1 row)
이 출력은 복제가 중단되었음을 보여줍니다. 상태는
down
입니다. 일반적으로 출력에서는 상태가replicating
으로 표시됩니다.
논리적 복제 프로세스가 중단된 경우 다음 단계에 따라 복제를 재설정할 수 있습니다.
게시자와 구독자 노드 간의 논리적 복제를 재설정하는 방법
복제를 다시 설정하려면 먼저 게시자 노드에서 구독자의 연결을 끊은 다음, 다음 단계의 설명에 따라 구독을 다시 설정합니다.
다음과 같이
psql
을 사용하여 구독자 노드에 연결합니다.psql --host=
222222222222
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres
--password --dbname=labdb
pglogical.alter_subscription_disable
함수를 사용하여 구독을 비활성화합니다.SELECT pglogical.alter_subscription_disable('docs_lab_subscription',true);
alter_subscription_disable ---------------------------- t (1 row)
다음과 같이
pg_replication_origin
을 쿼리하여 게시자 노드의 식별자를 가져옵니다.SELECT * FROM pg_replication_origin;
roident | roname ---------+------------------------------------- 1 | pgl_labdb_docs_labcb4fa94_docs_lab3de412c (1 row)
이전 단계의 응답을
pg_replication_origin_create
명령과 함께 사용하여, 구독을 다시 설정할 때 사용할 수 있는 식별자를 할당합니다.SELECT pg_replication_origin_create('pgl_labdb_docs_labcb4fa94_docs_lab3de412c');
pg_replication_origin_create ------------------------------ 1 (1 row)
다음 예제와 같이 구독의 이름을
true
상태로 전달하여 구독을 활성화합니다.SELECT pglogical.alter_subscription_enable('docs_lab_subscription',true);
alter_subscription_enable --------------------------- t (1 row)
노드의 상태를 확인합니다. 노드의 상태는 이 예제에서처럼 replicating
이어야 합니다.
SELECT subscription_name,status,slot_name FROM pglogical.show_subscription_status();
subscription_name | status | slot_name -------------------------------+-------------+------------------------------------- docs_lab_subscription | replicating | pgl_labdb_docs_lab98f517b_docs_lab3de412c (1 row)
게시자 노드에서 구독자 복제 슬롯의 상태를 확인합니다. 슬롯의 active
열은 t
(true)를 반환해야 하며, 복제가 다시 설정되었다는 뜻입니다.
SELECT slot_name,plugin,slot_type,active FROM pg_replication_slots;
slot_name | plugin | slot_type | active -------------------------------------------+------------------+-----------+-------- pgl_labdb_docs_lab98f517b_docs_lab3de412c | pglogical_output | logical | t (1 row)
RDS for PostgreSQL용 논리적 복제 슬롯 관리
논리적 복제 시나리오에서 게시자 노드 역할을 하는 RDS for PostgreSQL DB 인스턴스의 메이저 버전 업그레이드를 수행하려면, 먼저 인스턴스에서 복제 슬롯을 삭제해야 합니다. 메이저 버전 업그레이드 사전 점검 프로세스에서는 업그레이드를 진행하려면 슬롯을 삭제해야 한다는 메시지가 표시됩니다.
RDS for PostgreSQL DB 인스턴스에서 슬롯을 삭제하려면 먼저 구독을 삭제한 다음 슬롯을 삭제합니다.
pglogical
확장을 사용하여 만든 복제 슬롯을 식별하려면 각 데이터베이스에 로그인하여 노드 이름을 확인하십시오. 구독자 노드를 쿼리하면 이 예제에서처럼 출력에 게시자와 구독자 노드가 모두 표시됩니다.
SELECT * FROM pglogical.node;
node_id | node_name ------------+------------------- 2182738256 | docs_lab_target 3410995529 | docs_lab_provider (2 rows)
다음 쿼리를 사용하면 구독 세부 정보를 확인할 수 있습니다.
SELECT sub_name,sub_slot_name,sub_target FROM pglogical.subscription;
sub_name | sub_slot_name | sub_target ----------+--------------------------------+------------ docs_lab_subscription | pgl_labdb_docs_labcb4fa94_docs_lab3de412c | 2182738256 (1 row)
이제 다음과 같이 구독을 삭제할 수 있습니다.
SELECT pglogical.drop_subscription(subscription_name := 'docs_lab_subscription');
drop_subscription ------------------- 1 (1 row)
구독을 삭제한 후에는 노드를 삭제해도 됩니다.
SELECT pglogical.drop_node(node_name := 'docs-lab-subscriber');
drop_node ----------- t (1 row)
다음과 같은 방법을 이용해 노드가 더 이상 존재하지 않는지 확인할 수 있습니다.
SELECT * FROM pglogical.node;
node_id | node_name ---------+----------- (0 rows)
plogical 확장용 파라미터 참조
표에서는 pglogical
확장과 관련된 파라미터를 확인할 수 있습니다. pglogical.conflict_log_level
및 pglogical.conflict_resolution
같은 파라미터는 업데이트 충돌을 처리하는 용도로 사용합니다. 게시자의 변경 사항을 구독한 테이블과을 로컬로 변경하면 충돌이 발생할 수 있습니다. 양방향 복제 또는 동일한 게시자로부터 여러 구독자를 복제하는 경우를 비롯한 다양한 시나리오에서도 충돌이 발생할 수 있습니다. 자세한 내용은 pglogical을 사용한 PostgreSQL 양방향 복제
파라미터 | 설명 |
---|---|
pglogical.batch_inserts | 가능한 경우 배치를 삽입합니다. 기본적으로는 설정되지 않습니다. 켜려면 '1'로 변경하고 끄려면 '0'으로 변경합니다. |
pglogical.conflict_log_level | 해결된 충돌을 로깅하는 데 사용할 로그 수준을 설정합니다. 지원되는 문자열 값은 debug5, debug4, debug3, debug2, debug1, info, notice, warning, error, log, fatal 및 panic입니다. |
pglogical.conflict_resolution | 해결할 수 있는 충돌인 경우 충돌을 해결하는 데 사용할 메서드를 설정합니다. 지원되는 문자열 값은 error, apply_remote, keep_local, last_update_wins 및 first_update_wins입니다. |
pglogical.extra_connection_options | 모든 피어 노드 연결에 추가할 연결 옵션입니다. |
pglogical.synchronous_commit | pglogical 특정 동기 커밋 값입니다. |
pglogical.use_spi | 하위 수준 API 대신 SPI(서버 프로그래밍 인터페이스)를 사용하여 변경 사항을 적용합니다. 켜려면 '1'로 설정하고 끄려면 '0'으로 설정합니다. SPI에 대한 자세한 내용은 PostgreSQL 설명서의 서버 프로그래밍 인터페이스 |
pg_repack 확장을 사용하여 테이블 및 인덱스에서 부풀림을 줄입니다.
pg_repack 확장을 사용하여 테이블과 인덱스에서 부풀림을 제거할 수 있습니다. 이 확장은 RDS for PostgreSQL 버전 9.6.3 이상에서 지원됩니다. pg_repack 확장에 대한 자세한 내용은 GitHub 프로젝트 설명서
pg_repack 확장을 사용하려면
-
다음 명령을 실행하여 RDS for PostgreSQL 인스턴스에 pg_repack 확장을 설치합니다.
CREATE EXTENSION pg_repack;
-
다음 명령을 실행하여 pg_repack에서 생성한 임시 로그 테이블을 다시 패키징할 수 있는 쓰기 권한을 부여합니다.
ALTER DEFAULT PRIVILEGES IN SCHEMA repack GRANT INSERT ON TABLES TO PUBLIC; ALTER DEFAULT PRIVILEGES IN SCHEMA repack GRANT USAGE, SELECT ON SEQUENCES TO PUBLIC;
pg_repack 클라이언트 유틸리티를 사용하여 데이터베이스에 연결합니다.
rds_superuser
권한이 있는 계정을 사용합니다. 예를 들어rds_test
역할이rds_superuser
권한을 가지고 있다고 가정하겠습니다. 다음 명령 구문이 나와 있습니다.pg_repack -h
db-instance-name
.111122223333.aws-region
.rds.amazonaws.com -U rds_test -k postgres-k 옵션을 사용하여 연결합니다. -a 옵션은 지원되지 않습니다.
pg_repack 클라이언트의 응답은 다시 구성된 DB 인스턴스 상의 테이블에 대한 정보를 제공합니다.
INFO: repacking table "pgbench_tellers" INFO: repacking table "pgbench_accounts" INFO: repacking table "pgbench_branches"
PLV8 확장 업그레이드 및 사용
PLV8은 PostgreSQL을 위한 신뢰할 수 있는 Javascript 언어 확장입니다. 저장 프로시저, 트리거 및 SQL에서 호출할 수 있는 기타 절차 코드에 사용할 수 있습니다. 이 언어 확장은 모든 최신 PostgreSQL 릴리스에서 지원됩니다.
PLV8
업그레이드 프로세스는 기존 PLV8 기능을 모두 삭제합니다. 따라서 업그레이드하기 전에 RDS for PostgreSQL DB 인스턴스의 스냅샷을 생성하는 것이 좋습니다. 자세한 내용은 DB 스냅샷 생성 섹션을 참조하세요.
새 PLV8 버전과 카탈로그 메타데이터 동기화
-
업데이트해야 하는 것을 확인합니다. 이렇게 하려면 인스턴스에 연결된 동안 다음 명령을 실행합니다.
SELECT * FROM pg_available_extensions WHERE name IN ('plv8','plls','plcoffee');
결과에 기본 버전보다 낮은 설치 버전에 대한 값이 포함된 경우 이 절차를 계속 진행하여 확장을 업데이트합니다. 예를 들어, 다음 결과 집합은 업데이트해야 함을 나타냅니다.
name | default_version | installed_version | comment --------+-----------------+-------------------+-------------------------------------------------- plls | 2.1.0 | 1.5.3 | PL/LiveScript (v8) trusted procedural language plcoffee| 2.1.0 | 1.5.3 | PL/CoffeeScript (v8) trusted procedural language plv8 | 2.1.0 | 1.5.3 | PL/JavaScript (v8) trusted procedural language (3 rows)
RDS for PostgreSQL DB 인스턴스의 스냅샷을 생성합니다. 이미 해당 스냅샷을 생성한 경우 이 단계를 건너뜁니다. 스냅샷이 생성되는 동안 다음 단계를 따라 계속 진행할 수 있습니다.
-
DB 인스턴스에 있는 PLV8 함수의 개수를 파악해야 업그레이드 이후 모두 존재하는지 확인할 수 있습니다. 예를 들어 다음 SQL 쿼리는 plv8, plcoffee 및 plls로 작성된 함수의 수를 반환합니다.
SELECT proname, nspname, lanname FROM pg_proc p, pg_language l, pg_namespace n WHERE p.prolang = l.oid AND n.oid = p.pronamespace AND lanname IN ('plv8','plcoffee','plls');
-
pg_dump를 사용하여 스키마 전용 덤프 파일을 생성합니다. 예를 들어, 클라이언트 시스템의
/tmp
디렉터리에 파일을 생성합니다../pg_dump -Fc --schema-only -U master postgres >/tmp/test.dmp
이 예에서는 다음 옵션을 사용합니다.
-
-Fc
- 사용자 지정 형식 -
--schema-only - 스키마(이 경우에서는 함수)를 생성하는 데 필요한 명령만 덤프
-
-U
– RDS 기본 사용자 이름 -
database
– DB 인스턴스의 데이터베이스 이름
pg_dump에 대한 자세한 내용은 PostgreSQL 설명서의 pg_dump
를 참조하세요. -
-
덤프 파일에 있는 'CREATE FUNCTION' DDL 문을 추출하십시오. 다음 예에서는
grep
명령을 사용하여 함수를 생성하는 DDL 문을 추출하여 파일에 저장합니다. 후속 단계에서 이를 사용하여 함수를 다시 생성합니다../pg_restore -l /tmp/test.dmp | grep FUNCTION > /tmp/function_list/
pg_restore에 대한 자세한 내용은 PostgreSQL 설명서의 pg_restore
를 참조하세요. -
함수 및 확장 기능을 중단합니다. 다음 예는 모든 PLV8 기반 객체를 중단합니다. 캐스케이드 옵션은 모든 종속이 중단되도록 합니다.
DROP EXTENSION pvl8 CASCADE;
PostgreSQL 인스턴스에 plcoffee 또는 plls 기반 객체가 포함된 경우 이러한 확장 기능에 대해 이 단계를 반복합니다.
-
확장 기능을 생성합니다. 다음 예에서는 plv8, plcoffee 및 plls 확장을 생성합니다.
CREATE EXTENSION plv8; CREATE EXTENSION plcoffee; CREATE EXTENSION plls;
-
덤프 파일과 "드라이버" 파일을 사용하여 함수를 생성합니다.
다음 예에서는 이전에 추출한 함수를 다시 생성합니다.
./pg_restore -U master -d postgres -Fc -L /tmp/function_list /tmp/test.dmp
-
다음 쿼리를 사용하여 모든 함수가 다시 생성되었는지 확인합니다.
SELECT * FROM pg_available_extensions WHERE name IN ('plv8','plls','plcoffee');
PLV8 버전 2는 결과 세트에 다음 추가 행을 추가합니다.
proname | nspname | lanname ---------------+------------+---------- plv8_version | pg_catalog | plv8