2016-07-28 3 views
1

OS Linux 데비안 5.3.1이 도움이되는 경우.PostgreSQL : CAST 열만 존재하는 경우

PostgreSQL에서 테이블로 가져올 수있는 CSV 파일이 있습니다. 그것들은 모두 동일한 일반 레이아웃 (예 : 전 세계적으로 동일한 열)이지만 일부는 약간 다릅니다 (일부 열은 일부 누락 될 수 있음). 더 명확하게하기 위해서, 일반적인 레이아웃은 컬럼 a, b, c, d, e로 가정되지만 일부 테이블은 컬럼 a, b, d, e, 기타 컬럼 b, c, d, e만을가집니다.

CAST를 사용하여 열의 유형을 변경하고 열 a, b, c, d, e가있는 하나의 단일 전역 테이블 (t_import)으로 가져 오기위한 일반 SQL 쿼리를 만들고 싶습니다. 일부 테이블이 일부 열을 그리워으로

INSERT INTO t_import (a, b, c, d, e) 
    SELECT (
     (CAST a AS integer) AS a, 
     (CAST b AS character varying(14)) AS b, 
     (CAST c AS integer) AS c, 
     (CAST d AS character varying) AS d, 
     (CAST e AS character varying) AS e 
    FROM t_csv; 

는 그러나, 나는 내가 가지고있는 테이블 수에 대해 너무 무심 것 내가 가져올 각 테이블에 대한 쿼리를 작성해야합니다.

내가 가져 오려는 테이블에 열이 있는지 확인하는 방법이 있습니까? 존재하는 경우에만 열거 나 다른 기본값을 사용 하시겠습니까? 이 방법을 사용하면 오류없이 다른 테이블에 동일한 쿼리를 사용할 수 있습니다.

전 세계적으로이 내가 내가 할 싶은 무엇을 : 콜 럼 내가 가져올 테이블에있는 경우 열이 존재하는 경우,

  • ,

    • 검사를 내가 원하는 종류와 사용에 캐스팅 INSERT INTO에 대해
    • 이 없으면 일부 기본값을 사용하여 INSERT INTO에 여전히 삽입 할 항목이 있으므로 오류 메시지가 표시되지 않습니다.

    많은 연구를 거친 후에도 기술적 솔루션을 찾지 못했습니다. IF EXISTS, WHERE EXISTS, sub-queries ...와 같은 매개 변수로 인해 어려움을 겪고 있습니다. 그것을 할 수있는 방법이 있습니까 아니면이 문제를 보는 잘못된 방법이 있습니까? 기본값을 제공

  • +1

    동적 SQL을 사용하는 함수가 필요하며 예를 들어 다음과 같은 열을 검색해야합니다. 'information_schema.columns' –

    답변

    0

    단결 select 질의 : 열들이 관계없이 이름과 별명의 선택 순서대로 insert 명령에 전달됩니다

    insert into t_import (a, b, c, d, e) 
    
    select 
        a::integer, 
        b::character varying(14), 
        c::integer, 
        d::character varying, 
        e::character varying 
    from t_csv 
    
    union all 
    
    select 
        null, 
        a, 
        null, 
        b, 
        c 
    from t2_csv 
    

    알 수 있습니다.

    열의 두 번째 united 테이블에서 첫 번째 선택의 해당 열로 캐스팅되므로 명시 적으로 캐스팅 할 필요가 없습니다.

    관련 문제