사용자 정의 함수를 생성하고 등록한 후, 귀하의 작업은 본질적으로 완료되었습니다.포스트그레6075_6123.o파일 또는 공유 라이브러리) 귀하의 기능을 구현합니다. 앞서 언급했듯이,포스트그레다음 위치에서 코드를 로드합니다. 필요에 따라 런타임. 코드가 동적으로 작동하도록 하려면 로드된 경우 특별한 방법으로 컴파일하고 링크 편집해야 할 수도 있습니다. 이 섹션에서는 컴파일을 수행하는 방법과 사용자 정의를 로드하기 전에 링크 편집이 필요합니다. 실행으로 기능포스트그레스서버.
당신은 설명서를 읽고 (그리고 다시 읽고, 또 다시 읽어야 합니다) C 컴파일러 cc(1) 및 링크 편집기 ld(1)에 대한 페이지 구체적인 질문이 있습니다. 또한 기여 영역(PGROOT/기여) 및 회귀 테스트 스위트 디렉토리PGROOT/src/테스트/회귀이 프로세스의 몇 가지 작업 예제가 포함되어 있습니다. 복사하면 예를 들면 아무런 문제가 없을 것입니다.
아래에서는 다음 용어가 사용됩니다:
동적 로딩이것이 무엇입니까포스트그레객체에 수행 파일. 개체 파일이 실행 중인 파일에 복사됩니다.포스트그레스서버와 기능 및 파일 내의 변수는 함수에서 사용할 수 있습니다. 내에서포스트그레스프로세스.포스트그레스다음을 사용하여 이 작업을 수행합니다. 운영 체제에서 제공하는 동적 로딩 메커니즘입니다.
토토 핫 및 링크 편집이게 뭐야? 다른 종류의 파일을 생성하기 위해 개체 파일에 작업을 수행합니다. 객체 파일(예: 실행 가능한 프로그램 또는 공유 라이브러리) 링크 편집 프로그램인 ld(1)을 사용하여 이를 수행합니다.
다음 일반 제한 사항 및 참고 사항은 다음에도 적용됩니다. 아래 토론:
create function 명령에 제공된 경로는 절대 경로여야 합니다. 보이는 디렉토리를 참조하는 경로(예: "/"로 시작) 해당 머신에서포스트그레서버가 실행 중입니다.
팁:상대 경로는 실제로 작동하지만 데이터베이스가 상주하는 디렉토리( 일반적으로 프런트엔드 애플리케이션에는 표시되지 않습니다.) 분명히, 경로를 기준으로 경로를 만드는 것은 의미가 없습니다. 사용자가 프런트엔드 애플리케이션을 시작한 디렉터리 서버가 완전히 다른 환경에서 실행될 수 있기 때문에 기계!
그포스트그레사용자는 다음과 같아야 합니다 create function 명령에 지정된 경로를 탐색할 수 있습니다. 그리고 객체 파일을 읽을 수 있습니다. 그 이유는 다음과 같습니다.포스트그레서버는 다음과 같이 실행됩니다.포스트그레사용자, 사용자가 아님 프론트엔드 프로세스를 시작하는 사람. (파일을 만들거나 더 높은 수준의 디렉토리는 읽을 수 없거나 실행할 수 없습니다. "postgres" 사용자는 매우 흔한 실수입니다.)
객체 파일 내에 정의된 기호 이름은 충돌해서는 안 됩니다. 서로 또는 다음에 정의된 기호를 사용하여포스트그레.
GNU C 컴파일러는 일반적으로 특수 기능을 제공하지 않습니다. 운영 체제의 동적을 사용하는 데 필요한 옵션 로더 인터페이스. 이러한 경우에는 함께 제공되는 C 컴파일러 운영 체제를 사용해야 합니다.
Linux ELF에서는 다음을 지정하여 개체 파일을 생성할 수 있습니다. 컴파일러 플래그 -fpic.
예를 들어,
# 간단한 Linux 예 %cc -fpic -cfoo.c라는 개체 파일을 생성합니다.foo.o동적으로 토토 핫될 수 있음 안으로포스트그레. 추가 없음 로딩 또는 링크 편집을 수행해야 합니다.