2009-05-18 9 views
1

PostgreSQL의 필드에 텍스트 파일을 삽입하는 방법은 무엇입니까?PostgreSQL의 필드에 텍스트 파일을 삽입하는 방법은 무엇입니까?

로컬 또는 원격 텍스트 파일의 필드가있는 행을 삽입하고 싶습니다.

나는 다음을 수행하기 위해 gettext에 같은 기능() 또는의 getURL()을 기대

: 수집 (ID, 경로, 내용) VALUES (1 INTO

퍼센트의 INSERT를, '은/etc/motd의' , gettext ('/ etc/motd'));

-S.

답변

1

팁 주셔서 감사합니다. 내장 함수를 사용하여 또 다른 대답을 찾았습니다. 이를 실행하려면 수퍼 유저 권한이 있어야합니다!

-- 1. Create a function to load a doc 
-- DROP FUNCTION get_text_document(CHARACTER VARYING); 
CREATE OR REPLACE FUNCTION get_text_document(p_filename CHARACTER VARYING) 
    RETURNS TEXT AS $$ 
    -- Set the end read to some big number because we are too lazy to grab the length 
    -- and it will cut of at the EOF anyway 
    SELECT CAST(pg_read_file(E'mydocuments/' || $1 ,0, 100000000) AS TEXT); 
$$ LANGUAGE sql VOLATILE SECURITY DEFINER; 
ALTER FUNCTION get_text_document(CHARACTER VARYING) OWNER TO postgres; 

-- 2. Determine the location of your cluster by running as super user: 
SELECT name, setting FROM pg_settings WHERE name='data_directory'; 

-- 3. Copy the files you want to import into <data_directory>/mydocuments/ 
-- and test it: 
SELECT get_text_document('file1.txt'); 

-- 4. Now do the import (HINT: File must be UTF-8) 
INSERT INTO mytable(file, content) 
    VALUES ('file1.txt', get_text_document('file1.txt')); 
+0

Ack. 서식 지정. –

0

수 없습니다. 파일 내용 (또는 URL)을 읽고 원하는 필드에 저장하는 프로그램을 작성해야합니다.

3

가장 쉬운 방법은 삽입 가능한 스크립팅 언어 중 하나를 사용하는 것입니다. 기능이 urllib2가에 대한 의존도가 사용하는 의미입니다

 
CREATE FUNCTION gettext(url TEXT) RETURNS TEXT 
AS $$ 
import urllib2 
try: 
    f = urllib2.urlopen(url) 
    return ''.join(f.readlines()) 
except Exception: 
    return "" 
$$ LANGUAGE plpythonu; 

한 가지 단점이 예에 : 여기 plpythonu 사용하는 예제입니다 "파일 : ///"URL을 다음과 같이 로컬 파일에 액세스하려면 다음과 같이하십시오

gettext ('file : /// etc/motd');

+0

는이 함수를 생성하기 위해 수퍼 유저로 전환 할 필요합니다. 클라이언트 측 함수를 사용하는 것이 더 좋습니다. – bortzmeyer

+0

나는 원래의 질문에서 그가 나를 믿을 수 없다는 것을 알지 못했다. – TML