이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다현재버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

46 장. 연결 젠 토토 된 함수

사용자 정의 함수를 작성하고 등록한 후 당신의 작업은 본질적으로 완료되었습니다.Postgres그러나 객체 코드를로드해야합니다 (예 : A.O파일 또는 공유 라이브러리) 그것은 당신의 기능을 구현합니다. 앞서 언급했듯이Postgres코드를로드합니다 필요에 따라 런타임. 코드가 젠 토토되도록하기 위해 로드하면 특별한 방식으로 컴파일하고 링크해야 할 수도 있습니다. 이 섹션에서는 편집을 수행하는 방법과 사용자 정의를로드하기 전에 링크 편집이 필요합니다 달리기로 기능Postgres서버. 이 프로세스는 버전 4.2 기준으로 변경되었습니다.

팁 :오래된Postgres젠 토토 로딩 메커니즘에 대한 심층적 인 지식이 필요합니다 실행 가능한 형식, 배치 및 실행 파일 정렬 사람의 부분에 대한 기억 등의 지침 젠 토토 로더를 작성합니다. 이러한 로더는 느리고 버기. 버전 4.2에서Postgres동적 하중 메커니즘이있었습니다 젠 토토 로딩 메커니즘을 사용하도록 다시 작성했습니다. 운영 체제. 이 접근법은 일반적으로 더 빠릅니다 이전의 동적 하중보다 신뢰할 수 있고 휴대가 가능합니다 기구. 그 이유는 거의 모든 현대 버전이 UNIX의 젠 토토 로딩 메커니즘을 사용하여 공유 된 구현 따라서 라이브러리는 빠르고 신뢰할 수있는 것을 제공해야합니다 기구. 반면에 객체 파일은 있어야합니다 입력하기 전에 약간의 후 처리Postgres. 우리는 크게 증가하기를 바랍니다 속도와 신뢰성은 약간 감소합니다. 편의.

당신은 읽어야합니다 (그리고 다시 읽고 다시 읽음) C 컴파일러의 수동 페이지, CC (1) 및 링크 편집기 특정 질문이있는 경우 LD (1). 또한 회귀 디렉토리의 테스트 스위트pgroot/src/regress몇 가지 작업 예제를 포함합니다 이 과정의. 이 테스트가하는 일을 복사하면 문제가 있습니다. 다음 용어는 아래에서 사용됩니다.
  • 젠 토토 로딩isPostgres객체를 사용합니다 파일. 객체 파일이 실행 중에 복사됩니다Postgres서버 및 함수 및 파일 내 변수는 함수에 사용할 수 있습니다. 내에서Postgres프로세스.Postgres운영 체제가 제공하는 젠 토토 로딩 메커니즘.

  • 로드 및 링크 편집다른 종류의 생성을 위해 객체 파일을 사용합니다. 객체 파일 (예 : 실행 프로그램 또는 공유 라이브러리). 링크 편집 프로그램, ld (1).을 사용하여이를 수행합니다.

다음 일반적인 제한 및 메모도 아래 토론 :

  • create function 명령에 주어진 경로는 절대적이어야합니다. 눈에 보이는 디렉토리를 참조하는 경로 (즉, "/"로 시작) 기계에서Postgres서버가 실행 중입니다.

    팁 :상대 경로는 실제로 작동하지만 데이터베이스가있는 디렉토리와 관련하여 ( 일반적으로 프론트 엔드 응용 프로그램에는 보이지 않습니다). 분명히, 사용자가 프론트 엔드 애플리케이션을 시작한 디렉토리 서버가 완전히 다른 상태에서 실행 중일 수 있으므로 기계!

  • thePostgres사용자가 있어야합니다 기능 작성 명령에 주어진 경로를 통과 할 수 있습니다. 객체 파일을 읽을 수 있습니다. 이것은이기 때문입니다.Postgres서버로 실행됩니다Postgres사용자가 아닌 사용자 프론트 엔드 프로세스를 시작하는 사람. (파일 만들기 또는 a 상위 수준의 디렉토리는 읽을 수 없거나 실행 불가능합니다 "Postgres"사용자는 매우 일반적인 실수입니다.)

  • 객체 파일 내에 정의 된 기호 이름은 충돌해서는 안됩니다 서로 또는 기호로 정의 된Postgres.

  • GNU C 컴파일러는 일반적으로 특별한 것을 제공하지 않습니다. 운영 체제의 젠 토토을 사용하는 데 필요한 옵션 로더 인터페이스. 그러한 경우, 함께 제공되는 C 컴파일러 운영 체제를 사용해야합니다.

Ultrix

Ultrix. Ultrix는 공유 라이브러리 메커니즘이 없으므로 동적 로더 인터페이스에 제한 사항이 없습니다. ~에 다른 한편으로, 우리는 (Re)를 포송 할 수없는 동적 로더를 써야했다. 우리 자신과 진정한 공유 라이브러리를 사용할 수 없었습니다. Ultrix에서 유일한 제한은 각 객체 파일을 옵션 -g 0. (숫자``0 ''이 아니라 문자``o ''). 예를 들어,

# Simple Ultrix 예제
% CC -G 0 -C foo.c
foo.o라는 객체 파일을 생성합니다. 젠 토토Postgres. 추가 로딩 또는 링크 편집은 수행되지 않아야합니다.