2016-02-12 66 views
1

我试图从一个表到另一个插入数据使用:不能投类型的记录整数

INSERT INTO production.spend_fact (date, client_id, show_name, network_name, 
media_type, spend, load_id, note) 

SELECT date, client_id, show_name, network_name, media_type, spend, load_id, 
note 
FROM staging.spend_fact 
JOIN 
(SELECT MAX(load_id) 
    FROM production.load_dim) AS load_id 
ON 1=1; 

该查询以前的工作,直到我添加了一个新列(注)这两个表,现在我正在此错误:

ERROR: column "load_id" is of type integer but expression is of type record 

我试图铸造 “load_id” 由CAST(load_id AS INT)和load_id :: INT但都不起作用。

load_id FROM production.load_dim是类型的串行

load_id FROM production.performance_fact为整数类型

回答

1

你需要列名:

INSERT INTO production.spend_fact (date, client_id, show_name, 
            network_name, media_type, spend, load_id, note) 
    SELECT date, client_id, show_name, network_name, media_type, spend, 
      l.load_id, note 
    FROM staging.spend_fact CROSS JOIN 
     (SELECT MAX(load_id) AS load_id 
      FROM production.load_dim 
     ) l; 
0

你得到这个错误,因为load_id是您加入的子查询的表别名

当你指定在选择列表Postgres的表名会选择表的所有列作为单列类型值

就可以直接存取权限行值字段语法如下:(load_id).max

,或者你可以使用不同的命名您的加入:

join (select max(load_id) as load_id FROM production.load_dim) as dummy_name on true 

,或者您可以使用子查询,而不是加入:

select date, client_id, show_name, network_name, media_type, spend, 
(SELECT MAX(load_id) FROM production.load_dim) , 
note 
FROM staging.spend_fact;