이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.현재버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

39장. 연결 젠 토토으로 로드되는 함수

사용자 정의 함수를 생성하고 등록한 후, 귀하의 작업은 본질적으로 완료되었습니다.포스트그레스6110_6158.o파일 또는 공유 라이브러리) 귀하의 기능을 구현합니다. 앞서 언급했듯이,포스트그레다음 위치에서 코드를 로드합니다. 필요에 따라 런타임. 코드가 동적으로 작동하도록 하려면 로드된 경우 특별한 방법으로 컴파일하고 링크 편집해야 할 수도 있습니다. 이 섹션에서는 컴파일을 수행하는 방법과 사용자 정의를 로드하기 전에 링크 편집이 필요합니다. 실행으로 기능포스트그레서버. 이 프로세스는 버전 4.2부터 변경되었습니다.

팁:오래된포스트그레스젠 토토 로딩 메커니즘에는 다음 측면에 대한 심층적인 지식이 필요합니다. 실행 파일 형식, 실행 파일 배치 및 정렬 그 사람의 기억 속에 있는 지시 등 동적 로더 작성. 이러한 로더는 느리고 버기. 버전 4.2부터,포스트그레스젠 토토 로딩 메커니즘이 변경되었습니다. 에서 제공하는 젠 토토 로딩 메커니즘을 사용하도록 다시 작성되었습니다. 운영 체제. 이 접근 방식은 일반적으로 더 빠르고 더 이전 젠 토토 로딩보다 안정적이고 휴대성이 뛰어납니다. 메커니즘. 그 이유는 거의 모든 최신 버전이 UNIX에서는 젠 토토 로딩 메커니즘을 사용하여 공유를 구현합니다. 라이브러리이므로 빠르고 안정적인 서비스를 제공해야 합니다. 메커니즘. 반면에 개체 파일은 다음과 같아야 합니다. 로드되기 전에 약간 후처리됨포스트그레. 큰 폭의 증가를 기대합니다 속도와 신뢰성이 약간의 감소를 보상할 것입니다. 편리함.

당신은 설명서를 읽고 또 다시 읽고 또 읽어야 합니다. C 컴파일러 cc(1) 및 링크 편집기 ld(1)에 대한 페이지 구체적인 질문이 있습니다. 또한, 회귀 테스트 스위트 디렉토리PGROOT/src/regress포함 이 프로세스의 몇 가지 작업 예입니다. 이것들을 복사하면 테스트를 수행하면 아무런 문제가 없어야 합니다. 다음 아래에서는 용어가 사용됩니다.

  • 젠 토토 로딩이게 뭐야포스트그레스객체에 수행 파일. 개체 파일이 실행 중인 파일에 복사됩니다.포스트그레서버와 기능 및 파일 내의 변수는 함수에서 사용할 수 있습니다. 내에서포스트그레프로세스.포스트그레다음을 사용하여 이 작업을 수행합니다. 운영 체제에서 제공하는 젠 토토 로딩 메커니즘입니다.

  • 로드 및 링크 편집이게 뭐야? 다른 종류의 파일을 생성하기 위해 개체 파일에 작업을 수행합니다. 객체 파일(예: 실행 가능한 프로그램 또는 공유 라이브러리) 링크 편집 프로그램인 ld(1)을 사용하여 이를 수행합니다.

다음 일반 제한 사항 및 참고 사항은 다음에도 적용됩니다. 아래 토론:

  • create function 명령에 제공된 경로는 절대 경로여야 합니다. 보이는 디렉토리를 참조하는 경로(예: "/"로 시작) 해당 머신에서포스트그레스서버가 실행 중입니다.

    팁:상대 경로는 실제로 작동하지만 데이터베이스가 상주하는 디렉토리( 일반적으로 프런트엔드 애플리케이션에는 표시되지 않습니다.) 분명히, 경로를 기준으로 경로를 만드는 것은 의미가 없습니다. 사용자가 프런트엔드 애플리케이션을 시작한 디렉터리 서버가 완전히 다른 환경에서 실행될 수 있기 때문에 기계!

  • 포스트그레사용자는 다음과 같아야 합니다 create function 명령에 지정된 경로를 탐색할 수 있습니다. 그리고 객체 파일을 읽을 수 있습니다. 그 이유는 다음과 같습니다.포스트그레서버는 다음과 같이 실행됩니다.포스트그레스사용자, 사용자가 아님 프론트엔드 프로세스를 시작하는 사람. (파일을 만들거나 더 높은 수준의 디렉토리는 읽을 수 없거나 실행할 수 없습니다. "postgres" 사용자는 매우 흔한 실수입니다.)

  • 객체 파일 내에 정의된 기호 이름은 충돌해서는 안 됩니다. 서로 또는 다음에 정의된 기호를 사용하여포스트그레.

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

울트릭스

동적으로 로드된 개체 파일을 만드는 것은 매우 쉽습니다. 울트라릭스. ULTRIX에는 공유 라이브러리 메커니즘이 없으므로 동적 로더 인터페이스에 어떠한 제한도 두지 않습니다. 켜짐 반면에 우리는 이식 불가능한 동적 로더를 (다시) 작성해야 했습니다. 진정한 공유 라이브러리를 사용할 수 없었습니다. ULTRIX에서는 유일한 제한은 다음을 사용하여 각 개체 파일을 생성해야 한다는 것입니다. 옵션 -G 0. (이것은 숫자 ``0''이고 문자 'O''). 예를 들어,

# 간단한 ULTRIX 예
% cc -G 0 -c foo.c
foo.o라는 개체 파일을 생성합니다. 동적으로 로드됨포스트그레스. 추가 로딩이나 링크 편집은 수행되지 않습니다.