database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 10067 게시물 읽기
No. 10067
postgresql 외부 라이브러리 사용 방법
작성자
cu
작성일
2019-04-29 16:27
조회수
3,470

안녕하세요 

postgresql에서 c로 작성된 공유 라이브러리를 호출하는 방법이 있는지 문의드립니다.

이 글에 대한 댓글이 총 6건 있습니다.

소스의 contrib 디렉토리에 보면, 확장 모듈 예제들이 많이 있습니다. 

그것을 보면서, 

확장 모듈 형태로 wrapper를 만들어서 사용해야합니다. 

 

즉, libtest.so 가 있는데, 그 안에, int to_lower(instr *char, strlen int, outstr *char) 이런 형태의 함수가 있다고 했을 때, 그것을 pg_to_lower(...) 형태로 wrapper 함수를 만들고, 각 입출력 자료형은 pg 용으로 바꿔야합니다. 그리고, 그것을 확장 모듈로 등록해서 SQL 구문에서 사용합니다.

차근하게 만들면 그렇게 어렵지는 않습니다. 

김상기(ioseph)님이 2019-04-29 16:37에 작성한 댓글입니다.

 답변 감사드립니다.

테스트 예제로 만들어서 진행 하다가 공유 라이브러리 작성하고 postgresql에서 호출 까지는 했는데 

해당 라이브러리 참조하여 함수를 작성하려고 하니 library version missmatch 발생하는데 혹시 어느 부분

확인해야 하는지 알 수 있을까요?

cu님이 2019-04-30 10:17에 작성한 댓글입니다. Edit

 postgresql 확장 모듈은 메이져 버전 단위로 다시 빌드 해서 사용해야합니다.

9.6 에서 만든 .so 파일을 10 에서 사용하려면, 그런 메시지가 나와요. 

그때는 10 버전 include 와 라이브러리를 가지고, 해당 확장 모듈을 다시 컴파일 하셔야합니다. 

 

김상기(ioseph)님이 2019-04-30 13:13에 작성한 댓글입니다.

 제가 빌드한 so 파일은 9.3 대상으로 하였고 함수를 작성하려는 버전도 동일하게 9.3입니다.

그런데 .c 로 작성된 함수를 postgresql에서 create 하면 라이브러리 버전이 8.4라고 나오는데 도무지 원인을 찾을 수가 없습니다...ㅠㅠ

cu님이 2019-04-30 18:37에 작성한 댓글입니다. Edit

더 여쭙고 싶은게 기존에 실행파일을 만드는 a.c 라는 파일이 있는데 실행 파일을 만들 때 b.so라는 라브러리를 사용하는데 a.c를 postgresql에서 사용 가능한 함수 형식으로 바꾼다면 b.so라는 라이브러리는 어떻게 처리가 되어야 하는지 질문 드립니다.

cu님이 2019-05-02 09:56에 작성한 댓글입니다. Edit

1.

동적 라이브러리 로딩 우선 순위 때문에 발생하는 문제로 예상됩니다.

LD_LIBRARY_PATH 값으로 그 우선 순위를 조정할 수 있고요,

같은 이름의 8.4 동적 라이브러리를 먼저 로딩하면서 발생하는 것 같습니다.

8.4 관련 패키지들을 쓰지 않는다면 다 지우고 해보세요.

일단 만든 .so 파일이 어떤 동적라이브러리를 사용하는지 ldd 명령으로 확인해 보세요.

 

2.

a.c 가 b.so 를 이용한다면, a.c로 만든 a.so 가 b.so를 이용하게 됩니다.

즉, pg는 a.so를 로딩하고, 그 로딩과정에서 b.so는 자동으로 로딩하겠죠. 로딩할 수 있다면.

 

김상기(ioseph)님이 2019-05-03 15:40에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
10070postgreSql 외부연결 문제 [1]
포스트
2019-05-03
3373
10069postgres 관련 오프라인 강좌 추천 부탁드립니다. [1]
지오니
2019-05-02
3806
10068DB 해킹당했습니다. [1]
맨붕
2019-04-30
3484
10067postgresql 외부 라이브러리 사용 방법 [6]
cu
2019-04-29
3470
10066함수에서 파라미터 관련 [2]
지현명
2019-04-23
3343
10065특정유저에 function execute 권한 부여 후 조회할 수 있는 방법이 있나요? [1]
전석
2019-04-12
3368
10064psql시, FATAL: the database system is in recovery mode 문제 [2]
카비
2019-04-12
5465
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.051초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다