2010-05-21 2 views
0

PostgreSQL에서 시스템 경로를 저장할 적절한 위치를 찾으려고합니다.스크립트에서 참조 할 수 있도록 경로를 저장하는 PostgreSQL

내가하려는 것은 COPY 명령을 사용하여 테이블에 값을로드하는 것입니다. 그러나 동일한 파일 경로를 정기적으로 참조 할 것이므로 해당 경로를 한 곳에서 저장하려고합니다. 적절한 경로를 반환하는 함수를 만들려고했지만 COPY 명령에서 함수를 호출 할 때 구문 오류가 발생합니다. 이것이 올바른 방향인지 확신 할 수 없지만 어쨌든 코드를 게시 할 것입니다.

COPY 명령 :

COPY employee_scheduler.countries (code, name) 
    FROM get_csv_path('countries.csv') 
    WITH CSV; 

기능 정의 : 사람이이 작업을 수행하는 방법에 대한 다른 아이디어가있는 경우

CREATE OR REPLACE FUNCTION 
    employee_scheduler.get_csv_path(IN file_name VARCHAR(50)) 
    RETURNS VARCHAR(250) AS $$ 
DECLARE 
    path VARCHAR(200) := E'C:\\Brian\\Work\\employee_scheduler\\database\\csv\\'; 
    file_path VARCHAR(250) := ''; 
BEGIN 
    file_path := path || file_name; 
    RETURN file_path; 
END; 
$$ LANGUAGE plpgsql; 

내가 제안을 개방적이야.

UPDATE :

내가 수신하고 오류는 다음과 같습니다 employee_scheduler.get_csv_path FROM ('countries.csv')

:

ERROR : 또는 근처 "employee_scheduler" LINE (12)에서 구문 오류

COPY employee_scheduler.countries (code, name) 
    FROM employee_scheduler.get_csv_path('countries.csv') 
    WITH CSV; 

COPY employee_scheduler.countries (code, name) 
    FROM (employee_scheduler.get_csv_path('countries.csv')) 
    WITH CSV; 

COPY employee_scheduler.countries (code, name) 
    FROM (SELECT * FROM employee_scheduler.get_csv_path('countries.csv')) 
    WITH CSV; 

나는 이것이 달성하기 위해 노력하고있어 방법을 생각하기 시작 해요 : 나는 운이 다음과 같은 문장을 시도했습니다 불가능합니다. 다른 사람이 이것을 달성하는 방법에 대한 아이디어가 있습니까? 복사 문을 사용하려면 모든 곳에서 하드 코드를 코딩해야 할 수도 있습니다 ...

감사합니다.

답변

1

이것은 올바른 방법이 아닙니다. 복사 명령의 기능 호출은 도움이되지 않습니다. 수 있도록 아래로

함수 A를 작성하고 실행할 수 : CREATE 또는 함수 copy_data (파일 이름 텍스트) 반환 $$ 이 cmd를 텍스트를 선언 으로 int로 교체; 시작 cmd : = '복사'test_copy from '|' '' ''|| get_csv (filename) || '' ''|| ' 구분 기호 '||' '' '||', '||' ''|| ';' '; cmd 실행 return 1; 끝; $$ 언어 plpgsql;

0

귀하의 기능은 정상적으로 작동합니다. 그러나 내가 실수하지 않는 한 get_csv_path('countries.csv') 대신 employee_scheduler.get_csv_path('countries.csv')이라고 말하면됩니다. psql에서 이것을 시도해보고 제대로 작동하는지 확인하십시오 :

=> SELECT employee_scheduler.get_csv_path('countries.csv'); 
         get_csv_path       
------------------------------------------------------------- 
C:\Brian\Work\employee_scheduler\database\csv\countries.csv 
(1 row) 
+0

예, 이전에 employee_scheduler.get_csv_path를 추가하려고했지만 여전히 작동하지 않습니다. select 문을 사용하여 올바른 출력을 생성하지만 COPY 문에서 작동하지 않습니다. 내가받은 오류뿐만 아니라 내가 시도한 다른 것들로 내 질문을 업데이트했다. –

관련 문제