복붙노트

[SQL] PostgreSQL을 데이터베이스에 이미지를 삽입

SQL

PostgreSQL을 데이터베이스에 이미지를 삽입

나는 내 PostgreSQL 데이터베이스의 테이블에 이미지 "bytea와"를 삽입 할 수있는 방법을 알고 싶습니다? 나는 시간 동안 포럼을 검색 봤는데 본 같은 질문을 수십 번을 기록, 아직 하나의 답을 찾을 수 있습니다. 내가 보는 모든 .JPEG 내가 필요하지 않은 오래된 컬럼에 얼마나 삽입하는 방법입니다.

다음은 데이터베이스 테이블입니다 :

create table category  (
"id_category" SERIAL,
"category_name" TEXT,
"category_image" bytea,
constraint id_cat_pkey primary key ("id_category"))without oids;

나는 새로운 라인을 추가 할 때, 그것은 작동하지 않습니다 :

insert into category(category_name,category_image) values('tablette', lo_import('D:\image.jpg'));

해결법

  1. ==============================

    1.

    insert into category(category_name,category_image) values('tablette', bytea('D:\image.jpg'));
    

    열 유형이 BYTEA 인 경우 위의 솔루션은 작동

    insert into category(category_name,category_image) values('tablette', lo_import('D:\image.jpg'));
    

    칼럼 타입 OID 즉 물방울 경우 상기 용액 작동

    insert into category(category_name,category_image) values('tablette',decode('HexStringOfImage',hex));
    

    상기 복호 기능은 두 개의 파라미터를 가지고. 첫번째 파라미터 Image.The 번째 파라미터 HexString default.Decode이 기능에 의해 헥스 POSTGRES의 데이터 형식 열에서 바이트 BYTEA 저장소에 hexString을 띤다이다.

  2. ==============================

    2.(약간 여기에서 적응)이 함수 같은 뭔가 해결할 수 있습니다.

    (약간 여기에서 적응)이 함수 같은 뭔가 해결할 수 있습니다.

    create or replace function img_import(filename text)
      returns void
      volatile
      as $$
        declare
            content_ bytea;
            loid oid;
            lfd integer;
            lsize integer;
        begin
            loid := lo_import(filename);
            lfd := lo_open(loid,131072);
            lsize := lo_lseek(lfd,0,2);
            perform lo_lseek(lfd,0,0);
            content_ := loread(lfd,lsize);
            perform lo_close(lfd);
            perform lo_unlink(loid);
    
        insert into category values
        ('tablette',
        content_);
        end;
    $$ language plpgsql
    

    img_import ( 'D : \가 image.jpg') SELECT * FROM처럼 사용; 그것은 같은 느낌 경우 또는 절차를 다시 작성합니다.

  3. ==============================

    3.아래와 같은 기능을 만들 :

    아래와 같은 기능을 만들 :

    create or replace function bytea_import(p_path text, p_result out bytea) 
                           language plpgsql as $$
        declare
          l_oid oid;
        begin
          select lo_import(p_path) into l_oid;
          select lo_get(l_oid) INTO p_result;
          perform lo_unlink(l_oid);
        end;$$;
    

    와 같이 사용

    insert into table values(bytea_import('C:\1.png'));
    
  4. ==============================

    4.사용 SQL 워크 벤치 - 데이터베이스 탐색기 - 행을 삽입하고 대화를 따라 ...

    사용 SQL 워크 벤치 - 데이터베이스 탐색기 - 행을 삽입하고 대화를 따라 ...

    여기에 이미지 설명을 입력

  5. from https://stackoverflow.com/questions/22288898/insert-an-image-in-postgresql-database by cc-by-sa and MIT license