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 10430 게시물 읽기
No. 10430
plv8에 대해서, 인스톨 절차(ubuntu, postgresql 15.2) 부탁드립니다.
작성자
이규동(twinslee)
작성일
2023-05-15 08:04
조회수
6,127

프로시져 언어로 자바스크립트를 사용할수  있다고 하고,

어느 조사보고서를 보면 plpgsql보다 몇십배정도 빠르다고(C 다음으로 빠르다고) 도 해서.....

테스트를 해보려 했습니다만,

저의 리눅스와 postgresql의 초보적인 능력으로는 해결을 하지 못하고 있습니다.

염치없이 또 부탁 드려 봅니다.


- 프로시져의 소스코드도 숨길수 있는 이득도 있지 않을까 하고.


- https://github.com/plv8 를 참조해서 이것저것 보았습니다만, 이쪽이 맞는지도 궁금하네요


- 지원하는 postgresql버전도 9.6 이 마지막 인듯해 보이기도 합니다.

  그 이상버전에서즌 plv8이란 자바스크립트는 없어진것 같기도 하고요.


- https://github.com/plv8 를 보면

   plv8u 라고 해서, untrusted 라는 타입도 있는것 같습니다.

   postgresql 의 프로시져 언어에서 untrusted Language라는 것이 있는것 같은데 trusted와의 차이는,

   파일처리등등 시스템을 조작할수 있느냐 없느냐 가 구분점 인가요 ?


부탁드립니다.

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

1.

출발 페이지가

https://www.postgresql.org/docs/current/external-pl.html

여기고,


거기서

https://github.com/plv8/plv8

페이지를 소개하고 있네요.

프로시져 언어 규약은 8.x (정확히 언제인지 기억 안남) 버전에서 크게 한번 바뀌고,

지금까지 바뀐 것이 없기 때문에, 9.6 이나, 최신 버전이나 다 같이 돌아갈 것으로 예상 됩니다.


깃허브에서 알려주는대로 차근히 진행하면 크게 문제 없이 사용할 수 있을 것 같네요.


2.

plv8u 는 OS 범위까지 javascript 로 건드릴 수 있는 것을 허락하는 언어입니다.

plpython3u, plperlu ...  이렇게 u로 끝나는 것들이 모두 그렇습니다.

그래서, 이것들은 데이터베이스 슈퍼유저만 사용해서 함수를 만들 수 있습니다.

물론 만들어진 함수는 일반 사용자가 실행은 할 수 있고요.

보안 부분의 책임을 슈퍼유저에게 넘기는 것이죠.


3.

제 환경에서는 거의 40분 정도 걸렸네요.

깃허브에서 하라는 대로 했더니,

별 다른 것 없이 설치 되었습니다.


export PATH=/postgres/15/bin:$PATH

cd plv8...

make

make install

su - postgres

pg_ctl stop

pg_ctl start

psql


postgres=# create extension pl

plcoffee  plls      plv8

postgres=# create extension plv8 ;

CREATE EXTENSION

postgres=# DO $$ plv8.elog(NOTICE, "hello there!"); $$ LANGUAGE plv8;

NOTICE:  hello there!

DO




 

김상기(ioseph)님이 2023-05-16 09:56에 작성한 댓글입니다.
이 댓글은 2023-05-16 10:37에 마지막으로 수정되었습니다.

김상기님 이번건도 회신해 주셔서 너무 감사드립니다.

항상 감사한 마음으로, 많은 도움을 받고 있습니다.



제환경 쪽에서는 매끄럽지 않게 진행 되고 있습니다.


먼저, https://github.com/plv8/plv8 에서

Code쪽에서 plv8-r3.1.zip 를 다운받아서, 압축을 풀고

export PATH=/postgres/15/bin:$PATH 는 .profile에 들어 있어서 생략했습니다.

cd plv8-r3.1 로 가서

ubuntu@ubuntu2204-dest:~/down/plv8-r3.1$ make

했더니 아래와 같은 에러가 발생하고 있습니다.

(한글부분은 일본어를 한글로 번역하였습니다.

 우분투를 일본어에서 테스트 하고 있습니다)


make -f Makefiles/Makefile.linux v8

make[1]: 디렉토리 '/home/ubuntu/down/plv8-r3.1' 에 들어갑니다

Setting up build directory

Downloading LLVM

Downloading gn source

make[1]: git: 이러한 파일이나 디렉토리가 없습니다

make[1]: *** [Makefiles/Makefile.linux:25: build/gn/out/gn] 에러 1**27

make[1]: 디렉토리 '/home/ubuntu/down/plv8-r3.1' 에서 나갑니다

make: *** [Makefile:61: v8] 에러 2


다운받은 파일에 문제가 있는거 인가요.

별도 다운로드 링크가 보이질 않아, Code쪽에서 다운로드 받았습니다.


현재 우분투 22.04 일본어 에는

postgresql15.2 postgresql postgresql-contrib, postgresql-server-dev-15

oracle instant client  basic, devel. sqlplus

oracle_fdw 

가 설치되어 있습니다.


염치없이 다시한번 부탁드립니다.


 

이규동(twinslee)님이 2023-05-18 07:16에 작성한 댓글입니다.

자세히 보시면 git 명령어가 없어서 더이상 진행하지 못한다는 이야기였습니다.


제가 작업했던 history 쭉 올리면서 설명드릴게요.


 248  curl -OLJ https://github.com/plv8/plv8/archive/refs/tags/v3.1.6.tar.gz

다운 받고,

  249  ls

  250  tar xzf plv8-3.1.6.tar.gz

  251  cd plv8-3.1.6

  252  ls

  253  make

압축풀어 make 1차 시도를 했으나, pg_config 가 없어서 실패

대부분 postgresql extension은 pg_config 명령을 필요로 합니다.

그런데, 로그를 보니, wget 이 없어서 안된다고 해서

  254  export PATH=/postgres/15/bin:$PATH

  255  apt update

  256  apt upgrade

  257  apt install wget

  258  make

wget 설치하고 2차 make 시도를 했더니, 이번에는 xz 가 없어서 안된다고 해서 추가 패키지 실치하고, 다시 make

  261  apt install xz-utils

  262  make

3차 시도를 했더니 이번에는 git 없다고 해서 이 때서 부터 설치 문서를 보니, 그외

아래와 같은 꽤 많은 패키지들이 필요하다고 해서 한꺼번에 쭉 설치

  263  apt install git

  264  apt install ninja-build

  265  apt install python3

  266  apt install pkg-config

  267  make

4차 시도에서 이번에는 tinfo dev 패키지가 없어서 안되서

  271  apt install libtinfo-dev

  272  make all

했더니 이번에는 build 안에 이미 작업 중인게 있어 못한다고,

  273  cd build/

  274  ls

  275  cd ..

  276  ls

  277  make clean

  278  rm build/*

  279  rm -rf build/*

정리하고 다시 make

  280  make

  281  apt install libtinfo5

  282  rm -rf build/*

  283  ls

이번에는 libtinfo 버전이 5에서만 된다고 해서

  284  make all

다시 했더니, c++ 컴파일러 없어서 안된다고

  285  apt install g++

  286  rm -rf build/*

  287  make

성공

  288  ls

  289  make install


이랬습니다. 이렇게 친절하게 알려드리면 안되는데,

아, 그러니, 이렇게 저렇게 미리 싹 준비해서 하면 되겠네 하면, 나중에 까먹습니다.

기록을 해 두어도 버전이 올라가면 또 상황이 바뀌어 기록 해 둔게 의미가 없어집니다.


필요한 것은 왜 make 가 안되었는지 스스로 알아가고, 그것들을 어떻게 풀어야하는지를 알고 있어야합니다.

오픈소스쪽 개발자들의 숙명이랍니다.

plv8 경우는 비교적 쉬운 빌드입니다.

살다보면 정말 포기하고싶은 오픈소스들도 참 많습니다. 얼릉 오류 메시지를 어떻게 읽고 어떻게 대응해야하는가 이 능력을 키우는게 필요해 보이네요.

 

김상기(ioseph)님이 2023-05-18 16:52에 작성한 댓글입니다.

김상기님 너무 감사드립니다.


리눅스에서 오픈소스들 빌드해서 설치하는것이 이 정도의 과정인줄은 미처 몰랐습니다.


postgresql, oracle instant client, oracle_fdw 설치해가면서

어려움이 있어서 험난한 과정을 거치면서 진행 했다고 생각했었는데

김상기님의 설치과정 이력과 이정도가 쉬위과정에 속한다고 하시니,

앞으로의 일들이 걱정이 됩니다.


실은,

oracle과 sqlserver에서 움직이는 제품이 있습니다.

고객측에서 라이센스비용을 줄일수있게 postgresql에서 움직이는 제품의 니즈가 있어서,

여러가지 검증작업을 진행하고 있는중입니다.

postgresql용 제품는 ,

[일반 개발자 수준의  사용자들이 쉽게 환경구축할수 있는 한도 안에서]

라는 과제가 하나 더 추가 되는 것 같습니다.


소스로 빌드 작업이 환경에 꽤 민감하다는것은 인식하고 있었지만,

이정도 일거라고는 인식하지 못했었는데,

이번에 해주신 가이드로 많은 공부가 되었습니다.

정말 감사드립니다.






 

이규동(twinslee)님이 2023-05-19 08:06에 작성한 댓글입니다.

김상기님 의 자세한 가이드 덕분에 설치를 마치고 테스트 해보았습니다.


자바스크립트를 시도해보았던 이유는 

프로시져의 소스코드를 숨기기 위한 목적이었는데

sf로 소소코드가 보여지고 있습니다.


예를 들어, 아래처럼

create procedure

...전 소스코드....

LANGUAGE plv8 (기타 다른언어)

과 같은 모양으로 만들면

결국은 어떤 언어라도 다 보여질수 밖에 없지 않을까 생각합니다.


일전에 프로시져 소스코드 암호화 에대해 올린 게시글에서

파이썬을 이용한 소스코드 안보이게 하는 예제 ( https://database.sarang.net/?inc=read&criteria=pgsql&subcrit=devel&aid=10420&id=0&limit=20&keyword=&page=1 )

도 참고하여 검토해보았습니다만,

파이썬 컴파일된 바이트코드 pyc파일도 역컴파일 하면 보여진다고 하는것 같습니다.

자바스크립트도 컴파일할수 있다고 하는데, 역컴파일하면 보여지것이 아닐까 생각합니다.


C언어 이외에 프러시저의 코드를 숨길수 있는 방법은 없는것 일까요 ?

유상제품의 PPAS에서 edb*wrap 사용하는 방법

외에는 없는것 일까요 ?

 

이규동(twinslee)님이 2023-05-23 11:37에 작성한 댓글입니다.

javascript의 코드 숨김 쪽을 잠깐 살펴보니, themida 라는 놈으로 하는데, 이놈도 상용이네요.


뭔가 숨긴다는 것은 돈이 된다는 거고, 돈이 되니 숨기는 비용도 지불하라는 논리네요. :)


java의 class나, python의 pyc나 모두 bytecode 형태의 실시간 짜깁기를 위해서 인터프리팅 시간을 줄이는 목적으로 이진 파일을 만드니, 당연히 원본 코드 비슷하게 다시 만들 수는 일을겝니다. themida는 어떨지는 모르겠습니다.


edb 쪽도 그렇고, themida도 그렇고 그렇네요.


이리 저리 뒤져보니, 또 themida로 뭉게놓은 코드를 다시 원본으로 돌리는 도구들도 돌아다니네요.


아무튼 알아서 잘 판단하셔서 사용하세요.

김상기(ioseph)님이 2023-05-23 15:55에 작성한 댓글입니다.
이 댓글은 2023-05-23 15:58에 마지막으로 수정되었습니다.

김상기님 감사합니다.

정말 많은 도움 받고 있습니다.


앞으로도 또 벽에 부딪치면 염치없지만 부탁드립니다.

이규동 드림.

이규동(twinslee)님이 2023-05-24 08:22에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
10434플래시백이나 휴지통 같은기능 [2]
김제이
2023-06-01
5417
10433postgres 실행계획 제어 [2]
김제이
2023-05-23
5961
10431windows 에서 PostgreSQL 엔진 갑자기 종료되는 현상/시작 안되는 현상 문의 [2]
송시윤
2023-05-15
6436
10430plv8에 대해서, 인스톨 절차(ubuntu, postgresql 15.2) 부탁드립니다. [7]
이규동
2023-05-15
6127
10428PK 조회시 순서가 이상해요. [1]
김대승
2023-05-12
5933
10427ubuntu postgresql-server-dev-15 에 해당하는 rocky에서의 패키지 이름은 ? [2]
이규동
2023-05-10
6146
10424lock확인을 위한 query history 확인 방법 [2]
키아
2023-05-08
5799
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다