Search Postgresql Archives

insert into ... select ... and column order

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello.

One of our users tried a "insert into ... select ..." that gave a strange error message. After digging into the issue, the problem seem to be that the order of the columns in the select statement must match the table definition. Here is a way to reproduce this case.

-- a source table and some content
create table source (USER_ID varchar(10), PRODUCT_ID varchar(8), PERMIT_START_DATE timestamp, PERMIT_END_DATE timestamp); insert into source (USER_ID, PRODUCT_ID, PERMIT_START_DATE, PERMIT_END_DATE) values ('a', 'b', now(), now()); insert into source (USER_ID, PRODUCT_ID, PERMIT_START_DATE, PERMIT_END_DATE) values ('c', 'd', now(), now()); insert into source (USER_ID, PRODUCT_ID, PERMIT_START_DATE, PERMIT_END_DATE) values ('e', 'f', now(), now());

-- two equal tables with different column order
create table dest_1 (USER_ID varchar(10), PRODUCT_ID varchar(8), PERMIT_START_DATE timestamp, PERMIT_END_DATE timestamp); create table dest_2 (PERMIT_END_DATE timestamp, PERMIT_START_DATE timestamp, PRODUCT_ID varchar(8), USER_ID varchar(10));

-- ok
insert into dest_1 select USER_ID, PRODUCT_ID, min(PERMIT_START_DATE) as PERMIT_START_DATE, max(PERMIT_END_DATE) as PERMIT_END_DATE from source group by USER_ID, PRODUCT_ID; -- same sql, but to table with different column order failes. message: "column "permit_end_date" is of type timestamp without time zone but expression is of type character varying". insert into dest_2 select USER_ID, PRODUCT_ID, min(PERMIT_START_DATE) as PERMIT_START_DATE, max(PERMIT_END_DATE) as PERMIT_END_DATE from source group by USER_ID, PRODUCT_ID;

Why does the column order matter when the subselect has all the correct column names?

Regards,
 - Tore.

---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux