PLV8 확장 업그레이드 및 사용 - Amazon Relational Database Service

PLV8 확장 업그레이드 및 사용

PLV8은 PostgreSQL을 위한 신뢰할 수 있는 Javascript 언어 확장입니다. 저장 프로시저, 트리거 및 SQL에서 호출할 수 있는 기타 절차 코드에 사용할 수 있습니다. 이 언어 확장은 모든 최신 PostgreSQL 릴리스에서 지원됩니다.

PLV8을 사용하고 PostgreSQL을 새 PLV8 버전으로 업그레이드하는 경우 즉시 새로운 확장을 사용하세요. 다음 단계를 수행하여 카탈로그 메타데이터를 새 PLV8 버전과 동기화합니다. 이 단계는 선택 사항이지만 메타데이터 불일치 경고를 방지하려면 완료하는 것이 좋습니다.

업그레이드 프로세스는 기존 PLV8 기능을 모두 삭제합니다. 따라서 업그레이드하기 전에 RDS for PostgreSQL DB 인스턴스의 스냅샷을 생성하는 것이 좋습니다. 자세한 내용은 Amazon RDS의 단일 AZ DB 인스턴스에 대한 DB 스냅샷 생성 단원을 참조하십시오.

새 PLV8 버전과 카탈로그 메타데이터 동기화
  1. 업데이트해야 하는 것을 확인합니다. 이렇게 하려면 인스턴스에 연결된 동안 다음 명령을 실행합니다.

    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)
  2. RDS for PostgreSQL DB 인스턴스의 스냅샷을 생성합니다. 이미 해당 스냅샷을 생성한 경우 이 단계를 건너뜁니다. 스냅샷이 생성되는 동안 다음 단계를 따라 계속 진행할 수 있습니다.

  3. 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');
  4. 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를 참조하세요.

  5. 덤프 파일에 있는 'CREATE FUNCTION' DDL 문을 추출하십시오. 다음 예에서는 grep 명령을 사용하여 함수를 생성하는 DDL 문을 추출하여 파일에 저장합니다. 후속 단계에서 이를 사용하여 함수를 다시 생성합니다.

    ./pg_restore -l /tmp/test.dmp | grep FUNCTION > /tmp/function_list/

    pg_restore에 대한 자세한 내용은 PostgreSQL 설명서의 pg_restore를 참조하세요.

  6. 함수 및 확장 기능을 중단합니다. 다음 예는 모든 PLV8 기반 객체를 중단합니다. 캐스케이드 옵션은 모든 종속이 중단되도록 합니다.

    DROP EXTENSION plv8 CASCADE;

    PostgreSQL 인스턴스에 plcoffee 또는 plls 기반 객체가 포함된 경우 이러한 확장 기능에 대해 이 단계를 반복합니다.

  7. 확장 기능을 생성합니다. 다음 예에서는 plv8, plcoffee 및 plls 확장을 생성합니다.

    CREATE EXTENSION plv8; CREATE EXTENSION plcoffee; CREATE EXTENSION plls;
  8. 덤프 파일과 "드라이버" 파일을 사용하여 함수를 생성합니다.

    다음 예에서는 이전에 추출한 함수를 다시 생성합니다.

    ./pg_restore -U master -d postgres -Fc -L /tmp/function_list /tmp/test.dmp
  9. 다음 쿼리를 사용하여 모든 함수가 다시 생성되었는지 확인합니다.

    SELECT * FROM pg_available_extensions WHERE name IN ('plv8','plls','plcoffee');

    PLV8 버전 2는 결과 세트에 다음 추가 행을 추가합니다.

    proname | nspname | lanname ---------------+------------+---------- plv8_version | pg_catalog | plv8