PL/Rust를 사용하여 Rust 언어로 PostgreSQL 함수 작성 - Amazon Relational Database Service

PL/Rust를 사용하여 Rust 언어로 PostgreSQL 함수 작성

PL/Rust는 PostgreSQL에 대한 신뢰할 수 있는 Rust 언어 확장입니다. 저장 프로시저, 함수 및 SQL에서 호출할 수 있는 기타 절차 코드에 사용할 수 있습니다. PL/Rust 언어 확장은 다음 버전에서 사용할 수 있습니다.

  • RDS for PostgreSQL 16.1 이상의 16 버전

  • RDS for PostgreSQL 15.2-R2 이상의 15 버전

  • RDS for PostgreSQL 14.9 이상의 14 버전

  • RDS for PostgreSQL 13.12 이상의 13 버전

자세한 내용은 GitHub의 PL/Rust를 참조하세요.

PL/Rust 설정

DB 인스턴스에 plrust 확장을 설치하려면 DB 인스턴스와 연결된 DB 파라미터 그룹의 shared_preload_libraries 파라미터에 plrust를 추가합니다. plrust 확장이 설치되어 있으면 함수를 만들 수 있습니다.

shared_preload_libraries 파라미터를 수정하려면 DB 인스턴스가 사용자 지정 파라미터 그룹과 연결되어 있어야 합니다. 사용자 지정 DB 파라미터 그룹 생성에 대한 자세한 내용은 Amazon RDS의 파라미터 그룹 단원을 참조하세요.

AWS Management Console 또는 AWS CLI를 사용하여 plrust 확장을 설치할 수 있습니다.

다음 단계에서는 DB 인스턴스가 사용자 지정 DB 파라미터 그룹에 연결되어 있다고 가정합니다.

shared_preload_libraries 파라미터에 plrust 확장 설치

rds_superuser 그룹(역할)의 멤버인 계정을 사용하여 다음 단계를 완료합니다.

  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/rds/에서 Amazon RDS 콘솔을 엽니다.

  2. 탐색 창에서 Databases(데이터베이스)를 선택합니다.

  3. DB 인스턴스의 이름을 선택하여 세부 정보를 표시합니다.

  4. DB 인스턴스의 구성 탭을 열고 DB 인스턴스 파라미터 그룹 링크를 찾습니다.

  5. 링크를 선택하여 DB 인스턴스와 연결된 사용자 지정 파라미터를 엽니다.

  6. 파라미터 검색 필드에 shared_pre를 입력하여 shared_preload_libraries 파라미터를 찾습니다.

  7. 파라미터 편집을 선택하여 속성 값에 액세스합니다.

  8.  필드의 목록에 plrust를 추가합니다. 쉼표를 사용하여 값 목록에서 항목을 구분합니다.

  9. shared_preload_libraries 파라미터 변경 사항을 적용하려면 DB 인스턴스를 재부팅합니다. 초기 재부팅을 완료하려면 추가 시간이 필요할 수 있습니다.

  10. 인스턴스를 사용할 수 있게 되면 plrust가 초기화되었는지 확인합니다. psql을 사용하여 DB 인스턴스에 연결하고 다음 명령을 실행합니다.

    SHOW shared_preload_libraries;

    출력은 다음과 비슷한 형태가 됩니다.

    shared_preload_libraries -------------------------- rdsutils,plrust (1 row)
shared_preload_libraries 파라미터에 plrust 확장 설치

rds_superuser 그룹(역할)의 멤버인 계정을 사용하여 다음 단계를 완료합니다.

  1. modify-db-parameter-group AWS CLI 명령을 사용하여 plrust를 shared_preload_libraries 파라미터에 추가합니다.

    aws rds modify-db-parameter-group \ --db-parameter-group-name custom-param-group-name \ --parameters "ParameterName=shared_preload_libraries,ParameterValue=plrust,ApplyMethod=pending-reboot" \ --region aws-region
  2. reboot-db-instance AWS CLI 명령을 사용하여 DB 인스턴스를 재부팅하고 plrust 라이브러리를 초기화합니다. 초기 재부팅을 완료하려면 추가 시간이 필요할 수 있습니다.

    aws rds reboot-db-instance \ --db-instance-identifier your-instance \ --region aws-region
  3. 인스턴스를 사용할 수 있게 되면 plrust가 초기화되었는지 확인합니다. psql을 사용하여 DB 인스턴스에 연결하고 다음 명령을 실행합니다.

    SHOW shared_preload_libraries;

    출력은 다음과 비슷한 형태가 됩니다.

    shared_preload_libraries -------------------------- rdsutils,plrust (1 row)

PL/Rust를 사용하여 함수 생성

PL/Rust는 함수를 동적 라이브러리로 컴파일하고 로드한 다음 실행합니다.

다음 Rust 함수는 배열에서 배수를 필터링합니다.

postgres=> CREATE LANGUAGE plrust; CREATE EXTENSION
CREATE OR REPLACE FUNCTION filter_multiples(a BIGINT[], multiple BIGINT) RETURNS BIGINT[] IMMUTABLE STRICT LANGUAGE PLRUST AS $$ Ok(Some(a.into_iter().filter(|x| x.unwrap() % multiple != 0).collect())) $$; WITH gen_values AS ( SELECT ARRAY(SELECT * FROM generate_series(1,100)) as arr) SELECT filter_multiples(arr, 3) from gen_values;

PL/Rust가 있는 상자 사용

RDS for PostgreSQL 16.3-R2 이상 버전, 15.7-R2 이상 15 버전, 14.12-R2 이상 14 버전, 13.15-R2 이상 13 버전에서, PL/Rust는 추가 상자를 지원합니다.

  • url

  • regex

  • serde

  • serde_json

RDS for PostgreSQL 15.5-R2 이상 버전, 14.10-R2 이상 14 버전, 13.13-R2 이상 13 버전에서 RDS for PostgreSQL은 PL/Rust에서 두 개의 추가 크레이트를 지원합니다.

  • croaring-rs

  • num-bigint

Amazon RDS for PostgreSQL 버전 15.4, 14.9, 13.12부터 PL/Rust는 다음 상자를 지원합니다.

  • aes

  • ctr

  • rand

이 상자에서는 기본 기능만 지원됩니다. 새 RDS for PostgreSQL 버전에는 업데이트된 버전의 상자가 포함될 수 있으며 기존 버전의 상자는 더 이상 지원되지 않을 수 있습니다.

PL/Rust 함수가 새 메이저 버전과 호환되는지 테스트하려면 메이저 버전 업그레이드 수행에 대한 모범 사례를 따르세요. 자세한 내용은 블로그 Amazon RDS를 PostgreSQL의 메이저 및 마이너 버전으로 업그레이드하기 위한 모범 사례 및 Amazon RDS 사용 설명서에 나온 Amazon RDS용 PostgreSQL DB 엔진 업그레이드를 참조하세요.

PL/Rust 함수를 생성할 때 종속성을 사용하는 예제는 종속성 사용에서 확인하세요.

PL/Rust 제한 사항

기본적으로 데이터베이스 사용자는 PL/Rust를 사용할 수 없습니다. PL/Rust에 대한 액세스를 제공하려면 rds_superuser 권한이 있는 사용자로 연결하고 다음 명령을 실행합니다.

postgres=> GRANT USAGE ON LANGUAGE PLRUST TO user;