2009-11-06 8 views
4

나는 포스트 그레스 포스트 그레스 쿼리 오류

insert into c_d (select * from cd where ak = '22019763'); 

에서 쿼리를 가지고 그리고 나는이 "SELECT 표 INTO INSERT 표 2 * FROM"

ERROR: column "region" is of type integer but expression is of type character varying 
HINT: You will need to rewrite or cast the expression. 
+3

c_d 및 cd 테이블의 필드 순서는 동일합니까? 그렇지 않으면 쿼리의 필드를 명시 적으로 나타냅니다. –

+0

c_d 테이블의 필드가 cd 테이블의 필드보다 많습니다. 이 작업을 수행하는 다른 방법이 있습니까? – Roland

답변

6

다음과 같은 오류를 얻을의 위해에 달려 테이블 정의의 일부인 C 럼. 이름과 관계없이 table1의 각 열과 table2의 열을 같은 순서 값으로 줄 것입니다.

여기에있는 문제는 "region"테이블의 c_d와 같은 순서 값을 가진 cd의 모든 열이 호환되지 않는 유형이므로 암시 적 유형 변환을 사용하여 혼동을 해결할 수 없습니다.

INSERT INTO SELECT * 문은 두 테이블이 정의되어 있고 영원히 정의되지 않는 한 양식이 부정합니다. 정확히과 동일합니다. 하나의 추가 컬럼이 cd에 추가 되기만하면 외래 컬럼에 대한 오류가 발생하기 시작합니다.

가능하다면 SELECT 문에서 명시 적으로 열을 호출하는 것이 좋습니다. 함수를 호출하여 각 열 참조 내에서 유형을 변경할 수 있습니다 (또는이를 암시 적으로 수행하도록 새 유형 캐스트를 정의 할 수 있습니다 - CREATE CAST 참조). AS를 사용하여 열 레이블을 대상의 레이블과 일치하도록 설정할 수 있습니다 기둥.

어떤 이유로 든이 작업을 수행 할 수없는 경우 질문에 표시하십시오.

+1

더 자세히 설명하기 위해 다음과 같은 명령문에서 열 이름을 설명하는 방법이 있습니다 (Postgres, 다른 테이블의 행을 테이블로 복사) : 'INSERT INTO tablename (col1, col2, col3) SELECT * FROM ...' – hamx0r

1

체크 아웃 insert documentation. PostgreSQL의 구문은 다음 테이블에

INSERT [(칼럼 [...])] { 기본값 | VALUES ({expression | DEFAULT} [, ...]) | 같은 보일 것 여기 쿼리}

: c_d INTO

INSERT를 (1 열, 2 열 ...)을 선택하여 CD에서이 AK로 =의 '22019763'

입니다 * 한 테이블에서 다른 테이블로 값을 삽입 할 때 사용할 열의 유형과 순서가 정확히 같지 않은 구문입니다.